2012-08-17 1 views
2

나는 선택하려면 다음 호출이 : self.rlist, self.wlistself.plist는 IO 스트림의 목록입니다여러 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: 
    [...] 

(중 소켓, 파이프, 파일, 무엇이든). 지금, 나는이 선택이 스트림 중 하나가 어떤 이유로 실패 할 때 실패 할 수 있다고 가정합니다.

오류를 일으킨 스트림을 어떻게 확인할 수 있습니까? 내가 정말로하고 싶은 일은 그 목록에서 해당 IO 스트림을 제거하고 선택을 계속하는 것입니다.

답변

2

Socket Programming HOWTO에서 인용 : 선택과

한 매우 불쾌한 문제 : 어딘가에 소켓의 그 입력 목록에서 불쾌한 죽음을 죽은 한 경우, 선택은 실패 할 것입니다. 그런 다음 나쁜 목록을 찾을 때까지 select([sock],[],[],0)을 수행하여 모든 목록에있는 모든 망할 소켓을 반복해야합니다. 타임 아웃을 0으로 설정하면 오래 걸리지는 않지만 추한 것입니다.

관련 문제