我需要清空一个套接字中的数据(确保没有接收到任何内容)。不幸的是,Python socket模块中没有此功能。
我这样实现了一些东西:
def empty_socket(sock):
"""remove the data present on the socket"""
input = [sock]
while 1:
inputready, o, e = select.select(input,[],[], 0.0)
if len(inputready)==0: break
for s in inputready: s.recv(1)
你认为呢?有更好的方法吗?
更新:我不想改变套接字超时时间。这就是为什么我更喜欢select而不是read。
更新:最初的问题使用了“flush”一词。看起来“empty”是一个更好的术语。
更新-2010-02-27: 我注意到在对等端关闭时会出现错误。inputready始终填充套接字。通过添加最大循环次数,我解决了这个问题。有更好的解决方法吗?