1
我用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
阻止)。套接字处于阻塞模式。
当'recv'返回'b'''时,套接字为“EOF”:读取将永远不会阻塞,并且总是不会返回任何内容。因此'select'表示读取不会阻塞(它们不会),并且您应该读取并记录输入结束条件并做适当的事情(也许关闭套接字,如果它仅用于读取;也许只是停止选择阅读)。 – torek
@torek你说得对,你应该发布它作为答案:)谢谢btw – loolooyyyy