Python 当网络套接字始终可以读取时,如何使用select?
我像这样使用Python 当网络套接字始终可以读取时,如何使用select?,python,sockets,select,Python,Sockets,Select,我像这样使用选择: while True: readReady, _, _ = select.select([src, dst], [], []) for ready in readReady: if ready == dst: toRead = dst toWrite = src else: toRead = src toWrite = dst
选择:
while True:
readReady, _, _ = select.select([src, dst], [], [])
for ready in readReady:
if ready == dst:
toRead = dst
toWrite = src
else:
toRead = src
toWrite = dst
toWrite.sendall(toRead.recv(10))
如果toWrite
阻塞直到发送所有数据,这并不重要。但是问题是select
会立即返回,因为套接字在没有数据的情况下就可以读取了。我该如何等待,直到实际有一些数据
另外,print(toRead.recv(10))
printsb''
是空的(而我希望select
可以阻止)。套接字处于阻塞模式。这是select
API的一部分:如果select
调用返回一个可读的套接字,则必须在其上调用recv()
,否则以后每次调用select都会将此套接字作为仍然可读的套接字返回
如果您recv()
且未获得任何数据,则这表示套接字已关闭。当recv
返回b''
时,套接字处于“EOF”:读取将永远不会阻塞且始终不返回任何内容。因此,select
表示读取不会阻塞(不会阻塞),您应该读取并注意输入条件的结束,并采取适当的措施(如果只是为了读取,可能关闭套接字;可能只是停止读取选择)。@torek您是对的,您应该将其作为答案发布:)谢谢