我需要清空套接字上的数据(确保没有任何东西可以接收)。 不幸的是,在python套接字模块中没有这个功能。如何在python中清空套接字?
我已经实现的东西是这样的:
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)
你觉得呢?有没有更好的方法来做到这一点?
更新:我不想更改套接字超时。这就是为什么我喜欢选择阅读。
更新:原来的问题是使用'冲洗'的术语。看起来'空'是一个更好的术语。
更新 - 2010-02-27: 我注意到一个错误时,该货币对已经关闭。输入准备始终充满插座。我通过添加最大数量的循环来解决这个问题。有更好的解决办法吗?
这不是每个人都说的“同花顺”。查看文档中用于阅读套接字的示例。 http://docs.python.org/library/socket.html#example – JimB 2009-07-08 13:33:11
您是否考虑过使用Twisted代替您的程序?如果你这样做,你永远不需要做这样的事情。 Twisted会立即将所有数据从套接字中提取出来,并在任何时候将它们传递给您,因此您不需要混淆像Thomas的答案中所述的select()问题那样的难看的细节。 – Glyph 2009-07-09 11:19:33
@Glyph:不,我不认为Twisted是因为我想使用标准的python模块来避免外部依赖。感谢这个评论,我会看看扭曲,也许重新考虑我的选择 – luc 2009-07-09 11:42:32