c ++ определяет, закрыл ли клиент соединение (несколько сокетов) - PullRequest
2 голосов
/ 24 июня 2011

В моей программе у меня есть несколько сокетов на сервере. Каждый сокет имеет свой порт. Я попытался определить, закрыл ли клиент соединение с:

signal(SIGPIPE, sig_pipe);

Но у меня проблема в том, что я не знаю, на каком разъеме было закрыто соединение. Есть какой-нибудь способ узнать это?

Подробнее о коде: В основной программе я запустил 3 сокета на разных портах. Принимаю, получаю и отправляю для каждого сокета я положил в один поток. Итак, у меня есть 3 темы в конце.

Спасибо.

1 Ответ

3 голосов
/ 24 июня 2011

Вы должны настроить SIGPIPE, чтобы его игнорировали (см. sigaction(2)) и обрабатывать EPIPE код ошибки от write(2) и т.п.

Обратите внимание, что чтение нулевых байтов из сокета TCP является реальным признаком того, что другая сторона закрывает соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...