Войти

Показать полную графическую версию : разрыв соединения ТСР


evpu
10-12-2021, 16:12
Добрый день, товарищи!

Пилю ТСР сервер-клиентскую систему, сервер по привычке пишу на С в среде Debian, клиент под Вин на С#, но непонятные моменты если бывают тоже отлаживаю под Linux.

Подскажите, с ходу понять не могу, человеческое решение вопроса. Поднимаю ТСР сокет, слушаю порт через listen(), принимаю соединение через accept(), и далее слушаю порт через recv, отправляю через send, ну в общем как и описано во всех самоучителях, в неблокирующем режиме с применением select. Так вот, вопрос такой, а если клиент дал команду на закрытие сокета, как сервер может данный факт отследить? Именно когда клиент закрыл соединение явно, а не произошло тихое падение сети. Т.е что я должен прослушивать в цикле помимо recv чтобы определить отключение клиента? (то что при падении сети нужно закрывать сокет по таймауту и иначе этого не отследить - уже знаю).

На примере утилиты Essential net tools слушающей порт ТСР в режиме RAW я точно знаю, что факт закрытия порта клиентом может быть отслежен сервером абсолютно точно, если только клиент явно закрыл порт...




© OSzone.net 2001-2012