C#: пинг сокета

Рейтинг: 1Ответов: 1Опубликовано: 29.04.2015

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

Существует ли такая возможность?

Ответы

▲ 3Принят

Есть два взаимодополняющих механизма для решения этой проблемы.

Первый - TCP KeepAlive. Он предотвращает закрытие сокета при неактивности (действительно долгой неактивности, по умолчанию интервал таких "пингов" - раз в два часа). Включается следующей строчкой:

socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.KeepAlive, true);

Второй - реальная отправка пакета и ожидание ответа, раз в X секунд. Реализация зависит от протокола - сервер должен ожидать что ему придет пинг, и отправлять соответствующий ответ.