Сокет остается открытым после того, как программа закрылась (C++)

Сигнал является сообщением, или к целевому процессу, или к ОС о целевом процессе. Это - часть API Unix (и определяется в различных стандартах POSIX).

Read man kill, man signal, и man sigaction.

Другой ТАК вопросы, которые могли бы быть полезными:

6
задан fresskoma 5 May 2014 в 19:24
поделиться

6 ответов

http://hea-www.harvard.edu/~fine/Tech/addrinuse.html должен ответить на многие ваши вопросы. Я обычно использую SO_REUSEADDR, чтобы обойти эту проблему.

3
ответ дан 8 December 2019 в 18:39
поделиться
5
ответ дан 8 December 2019 в 18:39
поделиться

Не забудьте проверить возвращаемое значение close. Он вернет 0, когда сокет будет успешно закрыт. В случае неудачи он вернет -1.

0
ответ дан 8 December 2019 в 18:39
поделиться

Используйте netstat , чтобы выяснить, в каком состоянии находится ваша конечная точка. Я предполагаю, что она либо в TIME_WAIT , а не полностью закрыта. Это правильное поведение для TCP, и оно существует для того, чтобы позволить случайным сегментам, которые могут все еще находиться в эфире, прибыть и не вызывать проблем. Продолжительность TIME_WAIT примерно равна 2 * MSL, то есть вдвое больше максимального срока жизни сегмента в сети, таким образом гарантируя, что даже сегмент, который повторно передается, будет правильно обработан.

Как указывали другие. , SO_REUSEADDR - ваш друг, если конечная точка противоположной стороны каждый раз меняется. Это обычный случай, но иногда люди делают странные вещи, например, привязывают клиента к определенному порту, и в этом случае вы

4
ответ дан 8 December 2019 в 18:39
поделиться

Вы установили параметр SO_REUSEADDR ? Судя по тому, что вы говорите, похоже, что нет.

2
ответ дан 8 December 2019 в 18:39
поделиться

Вы уверены, что ваше приложение почему-то не работает в фоновом режиме?

-1
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: