@Dronnikkl
Программист

Epoll ESTABLISHED соединения на сервере?

Здравствуйте!

www.opennet.ru/base/dev/epoll_intro.txt.html


Собрал этом пример — сервер и клиент (tester.cpp) — все работает, но

если отключить интернет на клиентской машине (где tester.cpp) то все соединения

зависают на сервере:


tcp 0 0 213.239.219.253:4444 213.142.143.187:55305 ESTABLISHED

tcp 0 0 213.239.219.253:4444 213.142.143.187:55304 ESTABLISHED

tcp 0 0 213.239.219.253:4444 213.142.143.187:55307 ESTABLISHED

tcp 0 0 213.239.219.253:4444 213.142.143.187:55306 ESTABLISHED

tcp 0 0 213.239.219.253:4444 213.142.143.187:55301 ESTABLISHED

tcp 0 0 213.239.219.253:4444 213.142.143.187:55300 ESTABLISHED

tcp 0 0 213.239.219.253:4444 213.142.143.187:55303 ESTABLISHED

….

….

Какие есть алгоритмы для закрытия таких соединений?


Спасибо!
  • Вопрос задан
  • 2431 просмотр
Пригласить эксперта
Ответы на вопрос 1
mejedi
@mejedi
С точки зрения сервера, такие соединения ничем не отличаются от «нормальных». Любое соединение начинает в состоянии ESTABLISHED (игнорируем предшествующие состояния, которые относятся к установлению соединения). Состояние соединения на сервере меняется либо когда из сети приходят какие-то пакеты, либо когда сервер что-то делает с сокетом. В данном случае с клиентской машины не приходит ничего, поэтому состояние не меняется. Если сервер попытается что-то в такое соединение записать, по прошествии положенного таймаута соединение закроется с ошибкой no route to host.

Клиент может установить соединение и оставить его «висеть» неопределенное время, выглядеть это будет так-же. Решается это введением таймаута, по истечении которого соединение закрывается при отсутствии активности.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы