python socket timeout设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python socket timeout设置相关的知识,希望对你有一定的参考价值。

需要在调用socket的connect方法之前设置settimeout(time)方法,另外在设置之后要将再次调用settimeout(None)来设置socket进入阻塞模式。

如下代码示例:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect(address)
sock.settimeout(None)
fileobj = sock.makefile(‘rb‘, 0)



原来,socket 一旦设置了timeout, 就进入了 non-blocking 工作模式,原来的 send() 和 recv() 等的用法就完全不同了,可能会只发送或者接收了部分数据,需要检查返回值并多次重试。甚至,makefile() 是完全不允许使用的,它已经在 socket 模块的文档中明确声明,不过如果不是在这里栽过跟头很少会注意到这点。

明确了这一点,就可以写出在 non-blocking 模式工作的正确代码,会复杂不少,尤其处理一开始不能确定数据长度的文本协议。

阻塞和非阻塞是完全两种不同的使用方法,并不是添加一个socket.settimeout() 那么简单。








以上是关于python socket timeout设置的主要内容,如果未能解决你的问题,请参考以下文章

ftps.storlines socket.timeout尽管文件上传完成

python sokect默认多久断开

Socket.io 与 flask-socketio python。如何设置套接字保持活动/超时

urllib的实现---timeout,获取http响应码,重定向,proxy的设置

手机sockettimeout怎么解决

npm 错误!使用 ng new appname 创建新项目的代码 ERR_SOCKET_TIMEOUT