pipe 와 socket , inotify 을 select 로 묶었을 때 오동작
글쓴이: jos77 / 작성시간: 목, 2009/03/12 - 1:54오후
ubuntu linux 고요.
pipe fd [0] // [1] 이 write 용, [0] 이 read 용,
socket fd ,
inotify fd , // inotify event -> read 로 받는 fd
이렇게 3 종류를 select 로 묶었더니
select 가 맛이 갑니다.
제가 뭘 잘못 쓴건지 원래 이런건지 확인하고 싶네요 ㅠ.ㅠ
오동작으로 말씀드리자면
위의 세가지 다 select ( max_fd+1 , &rset , NULL , NULL , NULL) // wset 체크없이 timeout 없는 무한 wait
로 걸어놓으면
inotify fd 가 먼저 발생되서 처리되고 난 후에
pipe fd 에 readable 이 발생해도, select 에서 인식을 못해버립니다. (fd 숫자는 모두 대략 32개 정도)
socket 도 마찬가지고, 반대로 pipe 가 먼저 동작하면 나머지 둘은 인식되는데, 나머지 둘이 인식되고 나면 다시 pipe 가 막혀버리네요.
read 를 덜했나 싶었는데 select(); 바로 위에 넣은 로그가 찍히는 걸 보면 그렇지도 않은 것 같구요. 정확하게 select() 에서 hang 걸립니다.
그런데, select 가 아닌 poll 을 쓰면, 되네요 ㅠ.ㅠ 그렇게 해결하긴 했는데 select 에서만 지원이 안된다는게 이상하네요.
다른 분들도 비슷한 증상 나오는지 원인이 뭔지 알고 싶습니다.
Forums:
댓글 달기