OS FreeBSD. Проблема следующая. Если забиндить порт (функция bind),
а потом некорректно завершить приложение, то при последующих
попытках открыть этот порт происходит ошибка, мол, порт уже занят.Как с этим боротться?
Заранее спасибо.
>OS FreeBSD. Проблема следующая. Если забиндить порт (функция bind),
>а потом некорректно завершить приложение, то при последующих
>попытках открыть этот порт происходит ошибка, мол, порт уже занят.
>
>Как с этим боротться?
>
>Заранее спасибо.Лечится это дело вот такой операцией перед bind'ом :
int ss_n=1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&ss_n, sizeof(ss_n));
>>OS FreeBSD. Проблема следующая. Если забиндить порт (функция bind),
>>а потом некорректно завершить приложение, то при последующих
>>попытках открыть этот порт происходит ошибка, мол, порт уже занят.
>>
>>Как с этим боротться?
>>
>>Заранее спасибо.
>
>Лечится это дело вот такой операцией перед bind'ом :
> int ss_n=1;
> setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&ss_n, sizeof(ss_n));
А нельзя ли пояснить код?
А то у меня такая же проблема на Perl.
>>>OS FreeBSD. Проблема следующая. Если забиндить порт (функция bind),
>>>а потом некорректно завершить приложение, то при последующих
>>>попытках открыть этот порт происходит ошибка, мол, порт уже занят.
>>>
>>>Как с этим боротться?
>>>
>>>Заранее спасибо.
>>
>>Лечится это дело вот такой операцией перед bind'ом :
>> int ss_n=1;
>> setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&ss_n, sizeof(ss_n));
>А нельзя ли пояснить код?
>А то у меня такая же проблема на Perl.
это
man 7 socket
вообщем читайте маны - они рулят ;-)SO_REUSEADDR
Indicates that the rules used in validating addresses supplied
in a bind(2) call should allow reuse of local addresses. For
PF_INET sockets this means that a socket may bind, except when
there is an active listening socket bound to the address. When
the listening socket is bound to INADDR_ANY with a specific port
then it is not possible to bind to this port for any local
address.