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