如何在Python中检查套接字的数据缓冲区是否为空?
我想在调用 socket.recv(bufsize[, flags])
之前,检查一下套接字的数据缓冲区是不是空的。有没有什么方法可以做到这一点?
2 个回答
8
你可以先看一下(不是真的去使用这些数据):
data = conn.recv(bufsize, socket.MSG_PEEK)
3
你可能想把你的套接字设置为非阻塞模式:
socket.setblocking(0)
在你调用这个设置之后,如果你尝试从一个没有数据的套接字读取信息,它不会让你一直等下去,而是会抛出一个异常。想了解更多,可以查看socket.setblocking(flag)的详细说明。
如果你想要更高级的用法,可以看看select
。像这样的代码:
r, _, _ = select([socket],[],[],0)
# ^
# Timeout of 0 to poll (and not block)
它会告诉你你的套接字中是否有数据可以读取。