python套接字会超时吗?

时间:2014-05-13 22:13:33

标签: python sockets timeout

我正在尝试在python中创建一个客户端服务器程序,我想知道一旦建立连接它会永远超时,除非我以某种方式关闭连接?

若有可能保持连接开放?或一个标志,以保持连接始终打开??

基本上我希望客户端无限连接并保持连接。

2 个答案:

答案 0 :(得分:2)

socket.settimeout

来自文档:

<强> socket.settimeout(值)
阻止套接字操作设置超时。 value参数可以是表示秒的非负浮点数,也可以是None。如果给出了float,则如果在操作完成之前已超过超时时间值,则后续套接字操作将引发超时异常。将超时设置为None会禁用套接字操作的超时。 s.settimeout(0.0)等价于s.setblocking(0); s.settimeout(None)等同于s.setblocking(1)。

因此,如果您没有调用settimeout,您的连接将保持打开状态,直到您或其他主机关闭它为止。当然,没有任何问题,比如中间主机可以解决任何其他故障。 然后,您必须监控您的连接并在关闭时重新打开。

答案 1 :(得分:0)

您可以使用TCP KEEPALIVE选项保持连接打开。参见(linux howto)[http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/#overview]。我不确定Windows中的细节。它足够复杂,阅读文档比这里的例子更好。默认情况下,在linux内核上禁用Keepalive,这让你很清楚它的受欢迎程度(读取:不是很多)。正如其他人所建议的那样,优雅地处理断开连接甚至在协议中添加ping数据包是其他选择。