Как установить интервал сохранения активности для winsock
Я использую winsock и TCP. Я установил KeepAlive
вариант следующим образом
int aliveToggle = 1;
setsockopt(mySocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&aliveToggle, sizeof(aliveToggle));
Но как указать время и интервал Keep aLive?
Я использую VC++ на Windows 7.
2 ответа
Два параметра реестра для интерфейса под ключом \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Tcpip\Parameters управляют поведением постоянных имен TCP/IP:
Значение KeepAliveTime указывает, как долго TCP-соединение бездействует без трафика до того, как TCP отправит пакет keep-alive. Значение по умолчанию составляет 7 200000 миллисекунд (мс) или 2 часа.
Значение KeepAliveInterval указывает количество миллисекунд ожидания ответа после отправки подтверждения активности перед повторением подтверждения активности. Если ответ не получен, стек TCP/IP продолжает отправлять сообщения активности с этим интервалом до тех пор, пока ответ не будет получен или пока стек не достигнет предела повторения пакетов, указанного в разделе реестра TCPMaxDataRetransmissions. KeepAliveInterval по умолчанию равен 1 секунде (1000 .
Протоколы поддержки TCP отключены по умолчанию, но приложения Windows Sockets могут использовать функцию setsockopt, чтобы включить их для каждого подключения.
Примечание. Если разработчик решает использовать сообщения поддержки активности TCP для определенного соединения, время этих сообщений определяется значениями реестра, описанными выше. Невозможно использовать разное время для разных запросов 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