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尽管文件上传完成
Socket.io 与 flask-socketio python。如何设置套接字保持活动/超时