timeout 상황이 아닌데도 select 의 리턴이 0 이 되는경우
글쓴이: thisnome / 작성시간: 목, 2009/05/28 - 3:11오후
select 의 리턴값이 timeout 상황이 아닌데도 0 인 경우가 발생합니다.
여러 case 가 있겟지만 제가 겪는 경우는 select 에 입력되는 timeout 값이 특정크기를 넘기는 경우에 다른 event 가 발생하는 경우 리턴 0 이 먼저 발생하고 다시 select 에 진입해서야 해당 event (리턴 1) 이 발생합니다.
while(1) { tm.tv_sec = 68719477; tm.tv_usec = 0; iRet = select(1, &read_set, NULL, NULL, &tm); iRet 출력; }
재미있는것은, 제가 시험하는 머신 환경 (SunOS 5.10 sun4u sparc SUNW,Sun-Fire-V245) 에서 대략 68719477 초보다 큰 값을 넣으면 그런 일이 발생하는데, 이 시간이 입력한 시간의 값에 의존적인게 아니라 실제 이벤트가 발생할때의 시간에 의존하더군요.
예를들어 68719477 초보다 3초많은 68719480 초를 세팅하고 3초 전에 select 가 이벤트를 감지하면 iRet = 0, iRet = 1 가 되지만, 3초가 지난후에 이벤트가 발생할때는 iRet = 1 만 떨어집니다.
혹시 이런 현상이 왜 발생하는지 아시는지요? 궁금하네요. ^^
ps. 또다른 SUN 장비 (T5220) 에서도 비슷한 현상이 발생합니다. 수렴하는 시간만 다를뿐이죠 대략 70000000 초를 넘는 근처더군요
Forums:
댓글 달기