gpt4 book ai didi

python - 非阻塞套接字,错误总是

转载 作者:太空狗 更新时间:2023-10-29 20:46:11 25 4
gpt4 key购买 nike

sock.setblocking(0)
try:
data = sock.recv(1024)
except socket.error, e:
if e.args[0] == errno.EWOULDBLOCK:
print 'EWOULDBLOCK'
else:
if not data: #recv over
sock.close()
print 'close================='
else:
print 'recv ---data---------'
poem += data

以上所有代码都在一个循环中。使用非阻塞套接字(只是想测试“非阻塞套接字”)来获取数据。但总是打印'EWOULDBLOCK',我不知道为什么?

最佳答案

套接字是非阻塞的,因此如果没有数据可读,recv() 将引发异常。请注意 errno.EWOULDBLOCK = errno.EAGAIN = 11。这是 Python(实际上是操作系统)告诉您稍后再次尝试 recv() 的方式。

我注意到每次遇到此异常时都会关闭套接字。那根本没用。你的代码应该是这样的:

import socket, errno, time

sock = socket.socket()
sock.connect(('hostname', 1234))
sock.setblocking(0)

while True:
try:
data = sock.recv(1024)
if not data:
print "connection closed"
sock.close()
break
else:
print "Received %d bytes: '%s'" % (len(data), data)
except socket.error, e:
if e.args[0] == errno.EWOULDBLOCK:
print 'EWOULDBLOCK'
time.sleep(1) # short delay, no tight loops
else:
print e
break

对于这种事情,select模块通常是要走的路。

关于python - 非阻塞套接字,错误总是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com