프로그래밍/Unix/Linux

socket에 write,send 할때 프로그램이 죽는다?

AlwaysNR 2015. 6. 24. 17:46

이미 원격지에서 close된 socket에 send할때 발생.

closed socket에 send할때 리눅스는 SIGPIPE 시그널을 발생.

SIGPIPE에 대한 디폴더핸들러는 프로세스를 kill하는 것임.

프로세스 kill을 방지하려면

1. 프로세스가 SIGPIPE를 무시하도록 설정

ex)

signal(SIGPIPE, SIG_IGN);

or

sigignore(SIGPIPE);


또는


2. send함수를 시그널을 발생시키지 않도록 호출

ex)

 send(sockfd, buf, buflen, MSG_NOSIGNAL);