如何设置winsock的保持活动间隔

时间:2011-11-18 01:47:09

标签: sockets visual-c++

我正在使用winsock和TCP。 我已将KeepAlive选项设置如下

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

但是如何指定保持aLive时间和间隔?

我正在使用在Windows 7上运行的VC ++。

2 个答案:

答案 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保持活动消息,则这些消息的时间由前面描述的注册表值指定。在不同的保持活动请求中不可能使用不同的时间。