The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"проблема с SO_REUSEADDR"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"проблема с SO_REUSEADDR" 
Сообщение от roman Искать по авторуВ закладки(??) on 11-Окт-05, 16:31  (MSK)
Приветствую.

Установил бит SO_REUSEADDR на сокет, но что-то не всегда работает должным образом, периодически ругается (при запуске приложения), что мол сокет порт занят:

...
int sd;
int yes = 1;

if ( (sd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
  perror("socket() error!");
  exit(1);
}

if ( setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) {
{
  perror("setsockopt() error");
  exit(1);
}
...

if ( bind(sd, (struct sockaddr *)&serv_addr, sizeof serv_addr) == -1 ) {
  perror("bind() error");
  exit(1);
}
...

что еще нужно подкрутить?
Спасибо!

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "проблема с SO_REUSEADDR" 
Сообщение от butcher Искать по авторуВ закладки(ok) on 11-Окт-05, 17:07  (MSK)
>что еще нужно подкрутить?
>Спасибо!

Посмотрите, чем отличаются SO_REUSEADDR и SO_REUSEPORT.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "проблема с SO_REUSEADDR" 
Сообщение от roman Искать по авторуВ закладки(??) on 12-Окт-05, 08:43  (MSK)
>>что еще нужно подкрутить?
>>Спасибо!
>
>Посмотрите, чем отличаются SO_REUSEADDR и SO_REUSEPORT.
Такого параметра не нашел в своей системе (man 7 socket) - Linux ReadHat, ядро 2.4.20-8
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "проблема с SO_REUSEADDR" 
Сообщение от enot Искать по авторуВ закладки(??) on 12-Окт-05, 11:51  (MSK)
>>Посмотрите, чем отличаются SO_REUSEADDR и SO_REUSEPORT.
>Такого параметра не нашел в своей системе (man 7 socket) - Linux
>ReadHat, ядро 2.4.20-8
>

В Socket API много платформозависимых нюансов.
Книга "Стивенс. Сетевое программирование." должна лежать рядом.

// Хуже не будет:
#ifdef SO_REUSEPORT
if (setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes)) == -1) {
  perror("setsockopt(SO_REUSEPORT) error");
  close(sd);
  exit(1);
}
#endif

ЗЫ: перед заполнением структуры serv_addr (перед bind()) надеюсь делаем:
memset(&serv_addr, 0, sizeof(serv_addr));

PS: вообще-то должно работать..

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "проблема с SO_REUSEADDR" 
Сообщение от roman Искать по авторуВ закладки(??) on 12-Окт-05, 15:46  (MSK)
>В Socket API много платформозависимых нюансов.
>Книга "Стивенс. Сетевое программирование." должна лежать рядом.
в книге тоже ничего об этом параметре не упомянуто

>
>// Хуже не будет:
>#ifdef SO_REUSEPORT
>if (setsockopt(sd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes)) == -1) {
>  perror("setsockopt(SO_REUSEPORT) error");
>  close(sd);
>  exit(1);
>}
>#endif
>
>ЗЫ: перед заполнением структуры serv_addr (перед bind()) надеюсь делаем:
>memset(&serv_addr, 0, sizeof(serv_addr));
да, конечно
И тем не менее - не работает.
>
>PS: вообще-то должно работать..

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "проблема с SO_REUSEADDR" 
Сообщение от Alexander S. SalieFF emailИскать по авторуВ закладки on 13-Окт-05, 16:10  (MSK)
>>что еще нужно подкрутить?
>>Спасибо!
>
>Посмотрите, чем отличаются SO_REUSEADDR и SO_REUSEPORT.

SO_REUSEPORT в Linux'е еще нифига не утвержден для биндинга в libc, и на большинстве систем не определен, а его функции должен пока перекрывать SO_REUSEADDR. Чтоб не быть голословным, вот выдержка из свежепроапдейченой Fedora Core 3, /usr/include/asm/socket.h :
...
#define SO_BSDCOMPAT    14
/* To add :#define SO_REUSEPORT 15 */
#define SO_PASSCRED     16
...

Наверное не зря оно пока закомментарено...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру