Какое событие возникает, когда .Net Sockets Keep Alive не получает подтверждения? - PullRequest
2 голосов
/ 18 февраля 2011

Я настроил свой сокет C # .Net, используя

m_clientSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, Convert.ToInt32(True))

m_clientSocket.IOControl(IOControlCode.KeepAliveValues, SIO_KEEPALIVE_VALS, result)

Мои настройки должны отправляться каждые 30 секунд, а затем отправляться каждые 10 секунд, когда первое подтверждение не получено.

Iможет видеть поддержание активности и поддержание активности ack-флагов, отправляемых и получаемых на мой сервер, когда соединение установлено.

Когда соединение разорвано, я вижу, что мои сообщения о поддержании активности отправляются и подтверждение не принимается.Я вижу, что отправляемые контрольные сообщения изменили свое поведение в соответствии с моими настройками, то есть они отправляются каждые 10 секунд, а не каждые 30 секунд.

Я ожидал, что произойдет какое-то событие, такчто я могу ответить на разрыв (т.е. закрыть сокет, а затем начать пытаться утилизировать его).

Кто-нибудь может сказать мне, как узнать, что Keep Alives заметила, что соединение разорвано?

Спасибо, Ady

1 Ответ

1 голос
/ 22 июня 2011

Сокеты не вызывают события, касающиеся их состояния подключения (или чего-либо еще в этом отношении).Чтобы обнаружить сбой, вам нужно выполнить операцию отправки или получения.

Вы также должны получить указание о сбое, если будете периодически опрашивать сокет.Вот пример для этого здесь: Мгновенное обнаружение отключения клиента от сокета сервера

...