[완료] select 시에 발생하는 시그널이 pthread_condition 변수에 영향을 주는것 같습니다.(?)
글쓴이: muzie / 작성시간: 목, 2010/12/09 - 8:30오후
일단, nonblock으로 커넥션을 맺을때 연결이 불가능한 주소라도 간헐적으로 select가 양수(성공)를 내뱉을 때가 있습니다.
이 때 뭔가 시그널이 발생하는 것 같은데 같은 쓰레드 내에 pthread_cond_wait 같은 곳에 영향을 주는 것 같습니다.
1. 연결 불가능한 주소인데 왜 select에서 성공을 뱉는지 궁금하고
2. SIGIO 같은 시그널로 인해서 pthread_cond 류의 함수가 영향을 받을 수도 있는것인지
알고싶습니다. 이런 경우는 생전 처음 겪어봐서 엄청 당황스럽네요. 답변 부탁드리겠습니다. :)
Forums:
nonblocking connect() 는
nonblocking connect() 를 한 후 select() 를 하면 writable 하다고 리턴합니다. 실제 connection 의 성공/실패 여부는 getsockopt() 로 SO_ERROR 를 읽어보면 알 수 있습니다.
그리고 pthread_cond_wait() 은 pthread_cond_signal/broadcast() 을 호출하지 않아도 리턴되는 경우가 있습니다 (Spurious wakeup). 이때 0 (성공) 이 리턴됩니다. 그래서 컨디션변수 외에 또 다른 변수를 사용하여 while 루프를 돌면서 그 변수가 진짜 원하는 값일 때만 wait 이 성공했다고 판단하면 됩니다.
아 그렇군요.. 답변 정말 감사합니다. :)
아 그렇군요.. 답변 정말 감사합니다. :)
댓글 달기