当网络套接字随时可以读取时如何使用select?

时间:2013-10-16 18:08:23

标签: python sockets select

我像这样使用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阻止)。套接字处于阻塞模式。

1 个答案:

答案 0 :(得分:2)

这是select API的一部分:如果select调用返回一个可读的套接字,则必须在其上调用recv(),否则每次调用select都将返回此套接字为仍然可读。

如果您recv()并且没有获得任何数据,那么这表示已关闭套接字。