我像这样使用选择
:
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
阻止) 。套接字处于阻塞模式。
最佳答案
这是select
API的一部分:如果select
调用返回一个可读的套接字,则必须对其调用recv()
,否则每次后续的 select 调用都会返回此套接字,因为该套接字仍然可读。
如果您 recv()
没有收到任何数据,则表明套接字已关闭。
关于python - 当网络套接字始终准备好读取时如何使用 select?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410651/