프로세스가 쓰레드에 인터럽트를 처리.. (alarm)
글쓴이: hbsnow / 작성시간: 수, 2003/10/08 - 11:46오전
process -> thread1 생성
thread1에서 alarm(10);
10초후 process에서 EINTR 발생
쓰레드에는 아무 변화 없음
원하는 바는 쓰레드내에서 recv에 있어서 20초동안 아무일이 없으면 close를 하려고 하는데...
그래서 alarm를 썼는데 인터럽트(시그널)를 쓰레드가 받지 못하고 프로세스가 받습니다(SIGALRM)
그러다 보니 프로세스내에 select가 시그널을 받아서 EINTR이 발생하고 쓰레드는 계속 recv 대기중입니다.
send도 동일입니다.
해결방안이 뭐가있을가요?
Forums:
recv를 하지 마시고, select를 먼저 사용하시는 것이 좋습니다.
recv를 하지 마시고, select를 먼저 사용하시는 것이 좋습니다. select의 timeout 을 사용하세요.
setsockopt의 경우 호환성때문에... 안좋고,
alarm 은 signal을 사용하는 것인데, thread 를 사용하면서 동시에 signal을 사용할 경우, signal이 워낙 process 전역 객체라서,
그리 좋은 solution은 아닙니다.
---
http://coolengineer.com
댓글 달기