Broken pipe 처리
글쓴이: hbsnow / 작성시간: 화, 2003/08/19 - 10:43오전
중계서버를 개발하고 있는데요..
한쪽 client를 닫으면 Broken pipe가 떠 버리면서 서버가 죽어버리네요
참고로 쓰레드로 돌리고 있고요...
다른 한쪽은 살아있는데 말이죠 ㅠ.ㅠ
서버가 죽으면 안되잖아요.
그래서 send 리턴값이 -1이 오는지 체크해서 -1이면 close 처리를 해주었는데...
-1이 아닌지 실행하지 않고 바로 Broken pipe가 떠버리네요!
해결 방법이 없을가요?
Forums:


sigpipe signal을 처리해 주시면 될 것 같은데요.[code
sigpipe signal을 처리해 주시면 될 것 같은데요.
오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.
조금 자세히 알려주시면 안될까요?
조금 자세히 알려주시면 안될까요!
SIGPIPE 처리 방법
연결 파이프가 깨질 경우에는 말씀하신 것처럼 함수가 -1 을 리턴하는 것이
아니라 SIGPIPE 시그널이 발생합니다.
SIGPIPE의 기본 handler는 프로세스 종료이기 때문에,
이 시그널을 무시하셔야 서버가 죽지 않습니다.
코드는 간단합니다.
signal(SIGPIPE, SIG_IGN);그리고 쓰레드로 돌리고 있다고 하셨으니 단순한 signal말고
struct sigaction에 따로 만드신 handler를 정의하셔서
쓰레드에 대한 처리를 해주시면 될 것 같습니다.
중간에 뭔가 빠진 것 같은데 지금 바로 생각이 안 나는군요 -_-
어쨌든 위와 같은 방법으로 쓰레드 처리를 잘 해주시면 될 것입니다.