TCP соединение-зомби
От: remark Россия http://www.1024cores.net/
Дата: 05.10.07 16:44
Оценка:
Запускаю на одном комьютере под WinXP SP2 серверное и клиентское приложения. Клиент устанавливает TCP соединение с сервером.
Убиваю процесс клиента. Далее начинается самое интересное.
Клиентское соединение остаётся жить. netstat показывает его как ESTABLISHED и приписывает к [System].
TcpView тоже показывает его как ESTABLISHED и приписывает к <non-existent>:2932, т.е. остаётся PID клиента.
На сервере в это соединение можно успешно отсылать данные, при чтении данных выдаётся EWOULDBLOCK.
Установил SO_KEEPALIVE на 5 секунд — никакого результата.
Получаю SO_ERROR — соединение выглядит как живое.
Делаю select — тоже всё нормально — только запись установлена, ексепшена нет.

Я в недоумении. Поиск в google даёт аналогичные проблемы, но никто ничего внятного сказать не может.

Кто-нибудь может прояснить что это. Из-за чего. И как с этим бороться (кроме KEEPALIVE уровня приложения).




1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.