LINUX.ORG.RU

bind: Address already in use


0

0

bind: Address already in use

язык СИ
ОС UNIX

Имеется программа-сервер (самодельный).

При его перезапуске система не сразу
освобождает адрес локальной привязки сокета.
Вследствие этого ошибка вызова bind().
Порой не удается вновь запустить сервер
несколько минут.
Можно с этим смириться, но всё же неудобство.

Существует ли способ обойти эту трудность.

Кто знает прошу ответить.


Читайте Стивенса.

P.S. Вроде бы SO_REUSEADDR.

Davidov ★★★★ ()

kill -9
тоже должен освободить (поправьте меня, если ошибаюсь)

yltsrc ()
Ответ на: комментарий от oleg_2

SO_REUSEADDR
я попробую.
А не выйдет так что некая
другая программа тоже
привяжется к этому адресу?

Закрытия сокета как такового нет, а есть
exit(102)

oleg_2 ()

Если сервер принудительно завершает соединение, то серверный сокет по стандарту TCP должен удерживаться в течении времени двух периодов жизни пакета. Это кажется нужно, чтоб гарантированно не схватить «фантомное» закрытие соединения, оставшееся от предыдущей сессии.

Обычно на это все кладут и юзают SO_REUSEADDR

pathfinder ★★★★ ()
Ответ на: комментарий от oleg_2

Думать тут нечего. SO_REUSEADDR, как уже сказано выше.

На серверных сокетах его надо всегда ставить. Посмотрите код любой программы, использующей сокеты.

Kpoxman ★★ ()
Ответ на: комментарий от oleg_2

ftp-сервер так и поступает с 20-м портом
в пассивном режиме

oleg_2 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.