Pavel Gulchouck
2014-02-01 10:24:10 UTC
Hi All!
Есть сетевой демон, который по сигналу перечитывает конфиг.
В конфиге написан адрес/порт, который он слушает. Соответственно, он закрывает
слушающий сокет, перечитывает конфиг, и биндит его заново, с новыми значениями.
Иногда (нечасто, один раз на ~тысячу рестартов) bind() возвращает ошибку,
EADDRINUSE.
Почему это происходит и как правильно с этим бороться?
Вариант не перебиндивать сокет, если адрес/порт не поменялся, мне почему-то не
нравится, кажется заплаткой.
Проявляется в multithread-версии, т.е. вариант, что сокет унаследовался и
остался открыт ребёнком, вроде как, исключается.
Linux.
Lucky carrier,
Паша
aka ***@gul.kiev.ua
Есть сетевой демон, который по сигналу перечитывает конфиг.
В конфиге написан адрес/порт, который он слушает. Соответственно, он закрывает
слушающий сокет, перечитывает конфиг, и биндит его заново, с новыми значениями.
Иногда (нечасто, один раз на ~тысячу рестартов) bind() возвращает ошибку,
EADDRINUSE.
Почему это происходит и как правильно с этим бороться?
Вариант не перебиндивать сокет, если адрес/порт не поменялся, мне почему-то не
нравится, кажется заплаткой.
Проявляется в multithread-версии, т.е. вариант, что сокет унаследовался и
остался открыт ребёнком, вроде как, исключается.
Linux.
Lucky carrier,
Паша
aka ***@gul.kiev.ua