Закрытие слушающего сокета TCP в C
Предположим, у вас есть сокет, прослушивающий порт TCP, и некоторые клиенты подключены. Когда кто-то запускает sock_close(fd) в C и пытается снова выполнить привязку на том же порту, связывание завершается неудачно. Некоторое состояние TIME_WAIT отображается в "netstat -plutnoa", например:
tcp 0 0 127.0.0.1:4567 127.0.0.1:32977 TIME_WAIT - timewait (17.12/0/0)
Так как же правильно отключить сокет сервера и сразу же снова подключиться к тому же порту?
1 ответ
Решение
Вы хотите использовать SO_REUSEADDR
вариант на розетке. Соответствующая страница руководства socket(7)
, Вот пример его использования. Этот вопрос объясняет, что происходит.