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.wlist、およびself.plistは、IO ストリーム (ソケット、PIPE、ファイルなど) のリストです。ここで、何らかの理由でストリームの 1 つが失敗すると、この選択が失敗する可能性があると想定しています。

エラーの原因となったストリームを特定するにはどうすればよいですか? 私が本当にやりたいことは、その IO ストリームをリストから削除し、選択を続行することです。

4

1 に答える 1

2

Socket Programming HOWTOからの引用:

select に関する 1 つの非常に厄介な問題: ソケットの入力リストのどこかに厄介な死を遂げたものがある場合、select は失敗します。次に、これらすべてのリストのすべてのソケットをループし、悪いソケットselect([sock],[],[],0)が見つかるまで a を実行する必要があります。そのタイムアウト 0 は、時間がかからないことを意味しますが、醜いです。

于 2012-08-17T14:00:25.643 に答える