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