2012-08-17 88 views
2

我有以下電話進行選擇:如何處理選擇多個IO蒸汽時的錯誤?

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流的列表(無論是插座,管,文件,等等)。現在,我假定當某個流出於任何原因失敗時,此選擇可能會失敗。

如何找出哪些流導致錯誤?我真正想要做的是從列表中刪除該IO流並繼續選擇。

回答

2

Socket Programming HOWTO報價:

一個很討厭的問題與選擇:如果在某處插座的輸入列表是一個已經死了一個討厭的死亡,選擇將失敗。然後你需要遍歷所有這些列表中的每一個該死的套接字,並執行select([sock],[],[],0),直到找到錯誤的套接字爲止。 0的超時意味着它不會花費很長時間,但它很醜。