我有以下电话选择:
try:
rlst, wlst, plst = select.select(
[x.fileno() for x in self.rlist],
[x.fileno() for x in self.wlist],
[x.fileno() for x in self.plist])
except select.error, err:
[...]
self.rlist
,self.wlist
和self.plist
是IO流列表(套接字,PIPE,文件等等)。现在,我假设当其中一个流因任何原因失败时,此选择可能会失败。
如何找出哪些流导致错误?我真正想要做的是从列表中删除该IO流并继续选择。
答案 0 :(得分:2)
select的一个非常讨厌的问题:如果那些输入的套接字列表中的某个地方已经死了一个令人讨厌的死亡,那么选择将失败。然后,您需要遍历所有这些列表中的每个该死的套接字并执行
select([sock],[],[],0)
,直到找到坏的套接字。超时为0意味着它不会花费很长时间,但它很难看。