我正在使用winsock和TCP。
我已将KeepAlive
选项设置如下
int aliveToggle = 1;
setsockopt(mySocket,SOL_SOCKET,SO_KEEPALIVE,(char*)&aliveToggle, sizeof(aliveToggle));
但是如何指定保持aLive时间和间隔?
我正在使用在Windows 7上运行的VC ++。
答案 0 :(得分:18)
从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
的示例答案 1 :(得分:4)
密钥\ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Tcpip \ Parameters下的两个每个接口的注册表设置控制TCP / IP保持活动的行为:
KeepAliveTime值指定在TCP发送保持活动数据包之前TCP连接空闲且没有流量的时间。默认值为7,200,000毫秒(ms)或2小时。
KeepAliveInterval值表示在重复keep-alive之前发送keep-alive之后等待响应的毫秒数。如果未收到响应,则TCP / IP堆栈将继续以此间隔发送保持活动,直到收到响应或堆栈达到TCPMaxDataRetransmissions注册表项中指定的数据包重试限制。 KeepAliveInterval默认为1秒(1000。
默认情况下禁用TCP保持活动,但Windows套接字应用程序可以使用setsockopt函数在每个连接的基础上启用它们。
注意如果开发人员选择在特定连接上使用TCP保持活动消息,则这些消息的时间由前面描述的注册表值指定。在不同的保持活动请求中不可能使用不同的时间。