LINUX.ORG.RU

[FreeBSD] Проблемы с bind'ом

 


0

0

Суть проблемы такова: имеется самописный сервер (одновременно работают около 200-300 потоков), после перезапуска он перестаёт биндиться на порт. Пока что решаю проблему перезагрузкой сервера, что не ice.

Может кто-нибудь посоветовать в какую сторону копать?

P.S. потоки через pthread.

SO_REUSEADDR для сокета ставиться? покажи errno после bind()

anonymous
()
Ответ на: комментарий от desruptor

В перезапуске есть нормальное завершеие сокета?

Нормального завершения нет, все делает killall

И да ошибку bind покажи.

--bind error: Address already in use
PaulKaz
() автор топика
Ответ на: комментарий от PaulKaz

Хм, когда-то давно у меня была такая ошибка, решалась она ожиданием ~5 минут (может меньше), ибо сокет-то еще жив.

Сделай обработку SIGTERM процессом, чтобы он закрывал сокеты и ошибки не будет.

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

> решалась она ожиданием ~5 минут (может меньше)

60 секунд по умолчанию. SO_REUSEADDR в таких ситуациях помогает, но тогда возможен конфликт «два одновременно работающих сервера на одном порту», что приведет к проблемам.

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

Мы точно живем в одном пространственно-временном континууме? :-)

$ more /usr/src/kernels/2.6.33.4-95.fc13.x86_64/include/asm-generic/socket.h 
...
#define SO_REUSEADDR	2
...
#define SO_BSDCOMPAT	14
/* To add :#define SO_REUSEPORT 15 */
...

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

> Мы точно живем в одном пространственно-временном континууме?

Вы точно живете в разных:

/usr/src/kernels/2.6.33.4-95.fc13.x86_64/


[FreeBSD]

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

Виновата, проглядела FreeBSD :-( В слезах, ушла рыдать

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

похоже нет, смотрим в заглавие топика и видим FreeBSD.

На ней SO_REUSEADDR не дает возможности забиндить сокет на одину и туже пару адрес:порт нескольким процессам. А вот забиндиться если сокет висит в TIME_WAIT дает.

anonymous
()
Ответ на: комментарий от desruptor

Всем спасибо за помощь. Пока что сделал, через SO_REUSEADDR, позже добавлю обработку сигналов, чтоб «кошерно» было )

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