一,默认超时时间设置
socket.setdefaulttimeout(time)
- 参数
time
为超时时间,必须放到建立链接的前面,否则超时设置无效果
(这种方式可以设置默认超时时间,包含当前上下文的所有socket
连接超时和接收超时有效)
import socket
socket.setdefaulttimeout(5)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
sock.sendall('xxx')
sock.recv(1024)
sock.close()
二,设置某一个socket
实例连接或接收的超时时间
settimeout(time)
socket
实例调用的方法,设置当前socket
实例连接或接收的超时时间,参数time
为None
时恢复默认超时时间
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
sock.connect((host, port))
# 恢复默认超时设置,设置某些情况下socket进入阻塞模式(如makefile)
sock.settimeout(None)
sock.connect((host, port))
sock.sendall('xxx')
sock.recv(1024)
sock.close()
三,使用select
来设置超时时间
import select
mysocket.setblocking(0)
ready = select.select([mysocket], [], [], timeout_in_seconds)
if ready[0]:
data = mysocket.recv(4096)
网友评论