Сигнал является сообщением, или к целевому процессу, или к ОС о целевом процессе. Это - часть API Unix (и определяется в различных стандартах POSIX).
Read man kill
, man signal
, и man sigaction
.
Другой ТАК вопросы, которые могли бы быть полезными:
http://hea-www.harvard.edu/~fine/Tech/addrinuse.html должен ответить на многие ваши вопросы. Я обычно использую SO_REUSEADDR, чтобы обойти эту проблему.
Не забудьте проверить возвращаемое значение close. Он вернет 0, когда сокет будет успешно закрыт. В случае неудачи он вернет -1.
Используйте netstat
, чтобы выяснить, в каком состоянии находится ваша конечная точка. Я предполагаю, что она либо в TIME_WAIT
, а не полностью закрыта. Это правильное поведение для TCP, и оно существует для того, чтобы позволить случайным сегментам, которые могут все еще находиться в эфире, прибыть и не вызывать проблем. Продолжительность TIME_WAIT
примерно равна 2 * MSL, то есть вдвое больше максимального срока жизни сегмента в сети, таким образом гарантируя, что даже сегмент, который повторно передается, будет правильно обработан.
Как указывали другие. , SO_REUSEADDR
- ваш друг, если конечная точка противоположной стороны каждый раз меняется. Это обычный случай, но иногда люди делают странные вещи, например, привязывают клиента к определенному порту, и в этом случае вы
Вы установили параметр SO_REUSEADDR
? Судя по тому, что вы говорите, похоже, что нет.
Вы уверены, что ваше приложение почему-то не работает в фоновом режиме?