2

我有以下选择:

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.rlistself.wlistself.plist是 IO 流列表(套接字、PIPE、文件等)。现在,我假设当其中一个流因任何原因失败时,此选择可能会失败。

如何找出哪些流导致了错误?我真正想做的是从列表中删除该 IO 流并继续选择。

4

1 回答 1

2

引用Socket Programming HOWTO

select 的一个非常讨厌的问题:如果在这些套接字的输入列表中的某个地方是一个已经严重死亡的套接字,则 select 将失败。然后,您需要遍历所有这些列表中的每个该死的套接字并执行 aselect([sock],[],[],0)直到找到坏的套接字。超时 0 意味着它不会花费很长时间,但它很丑陋。

于 2012-08-17T14:00:25.643 回答