Как установить интервал keep alive для winsock

Я использую winsock и TCP. Я установил следующим образом

int aliveToggle = 1;
setsockopt(mySocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&aliveToggle, sizeof(aliveToggle));

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

Я использую VC++, работающий на windows 7.

2 ответов


два параметра реестра для каждого интерфейса в разделе \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Tcpip\параметры управляют поведением TCP / IP keep-alives:

значение KeepAliveTime указывает, как долго TCP-соединение простаивает без трафика, прежде чем TCP отправляет пакет keep-alive. Значение по умолчанию-7,200,000 миллисекунд (МС) или 2 часа.

значение KeepAliveInterval указывает, сколько миллисекунд ждать ответа после отправки keep-alive перед повторением держите-живым. Если ответ не получен, стек TCP/IP продолжает отправлять сообщения с этим интервалом до получения ответа или до тех пор, пока стек не достигнет предела повторной попытки пакета, указанного в разделе реестра TCPMaxDataRetransmissions. KeepAliveInterval по умолчанию 1 секунда (1000 .

TCP keep-alives отключены по умолчанию, но приложения Windows Sockets могут использовать функцию setsockopt, чтобы включить их на основе каждого соединения.

Если разработчик выбирает использование сообщений TCP keep-alive для конкретного соединения, время этих сообщений определяется значениями реестра, описанными выше. Невозможно использовать разные сроки для разных запросов keep-alive.


из c / C++ вы должны иметь возможность использовать SIO_KEEPALIVE_VALS для управления тайм-аутами. Вы не можете использовать setsockopt, но вы должны иметь возможность использовать WSAIoctl. Смотри http://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx

вот пример http://read.pudn.com/downloads79/ebook/301417/Chapter09/SIO_KEEPALIVE_VALS/alive.c__.htm