Как принудительно закрыть открытые / висячие розетки? - PullRequest
2 голосов
/ 20 января 2012

У меня есть приложение, разработанное на C ++, работающее на Linux.Это приложение открывает некоторые сокеты TCP при запуске.Но если это приложение завершается, когда соединение было в установленном состоянии, сокет на стороне сервера все еще остается в закрытом состоянии (TIME_WAIT) в течение нескольких мгновений.

Поскольку мое приложение перезапускается неумышленно, оно не может привязать порт, который принимаетпочти 60 секунд для закрытия после предыдущего сбоя.

Есть ли системный вызов, который может принудительно закрыть все открытые / висячие сокеты ??поэтому, прежде чем перейти к привязке, я могу убедиться, что все открытые / висячие гнезда закрыты и моя привязка не перестает работать.

Спасибо.

1 Ответ

3 голосов
/ 20 января 2012

Вы можете установить SO_REUSEADDR, используя setsockopt.Тогда вы сможете сразу связать.

int optval = 1;
setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...