unix / linux中的keepalive超时

Posted

技术标签:

【中文标题】unix / linux中的keepalive超时【英文标题】:keepalive timeout in unix/linux 【发布时间】:2012-08-06 07:25:26 【问题描述】:

如果客户端正在等待recv(),并且由于keepalive超时连接超时,recv()的返回值是多少,是否有任何特定的错误码设置为因keepalive超时而终止连接?

我可以看到我们在 windows 上有一个特定的 keepalive 错误代码。 WSAENETRESET 对于面向连接的套接字,此错误表明连接已由于在操作进行时检测到故障的保活活动而中断。对于数据报套接字,此错误表示生存时间已过期。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx

请告诉我。

【问题讨论】:

【参考方案1】:

如果发生保活超时,如果您尝试在套接字上使用read()write(),您将收到SIGPIPE

另请参阅: How to use SO_KEEPALIVE option properly to detect that the client at the other end is down?

【讨论】:

我相信 SIGPIPE 可以由于 keepalive 以及服务器重置连接而返回。有没有办法区分这两种情况? WSAECONNRESET 10054 连接被对等方重置。现有连接被远程主机强行关闭。如果远程主机上的对等应用程序突然停止,主机重新启动,主机或远程网络接口被禁用,或者远程主机使用硬关闭,这通常会导致(有关远程主机上 SO_LINGER 选项的更多信息,请参阅 setsockopt插座)。 如果连接因在一个或多个操作正在进行时检测到故障而导致连接中断,也可能导致此错误。正在进行的操作因 WSAENETRESET 而失败。后续操作因 WSAECONNRESET 而失败。

以上是关于unix / linux中的keepalive超时的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql中使用unix时间确定超时

如何减少 unix telnet 连接超时

Unix网络编程 高级IO套接字设置超时

Mac OS X 上的超时命令?

Mac OS X 上的超时命令?

Linux 和 C 中的 SPI 超时