python无法立即完成一个非阻止性套接字操作
发布网友
发布时间:2022-04-22 03:46
我来回答
共3个回答
热心网友
时间:2022-04-18 23:25
你使用了非阻塞模式,而10035表示数据还没有返回给你。
你可以在接收前先select一下,如果有数据就接受,没有就跳过。
你可参考python官方文档
http://docs.python.org/howto/sockets.html
里面有Non-blocking Sockets的一章可以看看。
import select
...
while 1:
infds,outfds,errfds = select.select([s,],[],[],5)
if len(infds) >0:
....
else:
print "no data coming"
热心网友
时间:2022-04-19 00:43
设置了non-block模式后, recv如果无法接受到数据, 就会报异常. 这个和C下返回EAGAIN的道理是一样的。
你只要加上try...except来判断就可以了
str=s.recv(1)
while 1:
try:
data=s.recv(1)
except:
# sleep
continue
if len(data)==0:
break
str+=data
热心网友
时间:2022-04-19 02:18
这里要改为s.send(b'GET / HTTP/1.1\r\n\r\n')
设置超时就没有异常了
s.settimeout(1)