有没有办法在python中检查套接字的数据缓冲区是否为空?

时间:2014-08-21 20:18:06

标签: python sockets

我想在调用socket.recv(bufsize[, flags])之前验证套接字数据缓冲区是否为空。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

您可能希望套接字无阻塞:

socket.setblocking(0)

在调用之后,如果从没有可用数据的套接字读取它,它将不会阻塞,而是引发异常。有关详细信息,请参阅socket.setblocking(flag)


对于更高级的用途,您可以查看select。类似的东西:

r, _, _ = select([socket],[],[],0)
#                               ^
#           Timeout of 0 to poll (and not block)

如果您的套接字中有读取的某些数据,将通知您。

答案 1 :(得分:2)

你可以偷看(看起来没有实际消费数据):

data = conn.recv(bufsize, socket.MSG_PEEK)