我像这样使用select
:
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))
打印b''
为空(我希望select
阻止)。套接字处于阻塞模式。
答案 0 :(得分:2)
这是select
API的一部分:如果select
调用返回一个可读的套接字,则必须在其上调用recv()
,否则每次调用select都将返回此套接字为仍然可读。
如果您recv()
并且没有获得任何数据,那么这表示已关闭套接字。