도커 컨테이너 debian:trixie 환경에서 작성된 글입니다.


SSL이 적용된 서버를 만들다가 서버가 갑자기 꺼져버리는 문제를 겪었다. 구체적으로는 SSL_shutdown을 실행할 때였다. shutdown함수를 호출할 때 내부에서 클로즈 노티를 상대방에게 전달한다고 하는데, 호출 직전에 클라이언트가 소켓을 close 해버리면 shutdown 함수가 실행되면서 서버가 꺼져버렸던 것.

 

그래서 gpt에게 이 문제에 대해 물어봤더니 이미 끊긴 소켓에 write(send)를 호출하면 커널이 SIGPIPE를 발생시키고, 시그널에 대한 기본동작이 프로세스 종료이기 때문에 서버가 꺼져버린 것이라고 알려줬다.

 

#include <signal.h>

int main()
{
    signal(SIGPIPE, SIG_IGN);
}

이렇게 시그널을 무시하도록 설정하면 write를 시도했을 때 실패하더라도 write가 -1를 리턴하고, errno가 EPIPE로 설정된다.

+ Recent posts