【发布时间】:2012-04-11 14:48:12
【问题描述】:
我有以下课程:
from socket import *
import select
class UdpListenerPort:
def __init__(self, socket):
self.socket = socket
self.socket.setblocking(0)
def get_data_to_dispatch(self):
is_ready = select.select([self.socket],[],[],0.01)
if is_ready[0]:
return self.socket.recvfrom(0xffff)[0]
else:
return None
从线程内运行。当我退出线程时,出现以下异常:
return self.socket.recvfrom(0xffff)[0]
socket.error: [Errno 10038] An operation was attempted on something that is not a socket
我怎样才能避免这种情况,
谢谢,
巴里
【问题讨论】:
-
您是否在套接字上调用了
bind? IIRC,如果您在未绑定的 UDP 套接字上调用recvfrom,WinSock 将返回该特定错误。 -
您能否设计一个独立的小型示例来演示这一点,或者至少包含完整的堆栈跟踪?
-
是的,我在为上面的类调用 init 之前绑定。但是,get_data_to_dispatch() 是从不同的线程调用的。我猜问题是当我尝试在 is_ready = select.select([self.socket],[],[],0.01) 或 return self.socket.recvfrom(0xffff )[0].