TCP-сервер ждёт подключение. Использует telnet, подключаемся - открывается соединение и всё, что мы пишем в telnet-клиенте, выаливается на консоль сервера. Теперь я закрываю telnet и... сервер понятия не имеет, что соединения больше нет, recv() в блокирующем режиме по-прежнему ждёт, что ему придут какие-то данные.
А если сделать сокет этого соединения неблокирующим, то recv() всё время возвращает ошибку 11 ("Resource temporarily unavailable").
Гадство какое-то.
И победить зомби-сокет не получается (в этом случае уже TCP-соединение).
setsockopt(socket_id, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int));
shutdown(socket_id, SHUT_RDWR);
close(socket_id);
- да плевать оно хотело, всё равно bind() будет плакать о уже занятом адресе около минуты после того, как процесс был завершён.Шо в лоб, шо по лбу.