원격 클라이언트에 연결하기 위한 TCP 소켓이 있는 서버가 있다고 상상해 보세요. segfault로 인해 서버가 종료되면 운영 체제에 의해 소켓이 닫히고 클라이언트는 RST를 통해 이를 알립니다. 아니면 클라이언트는 전혀 알지 못하며 클라이언트와 서버 시스템 모두에서 소켓이 열려 있는 상태로 유지됩니까?
답변1
프로세스가 디버거에 있고 segfaults가 있거나 segfault 신호가 포착되면 기술적으로 프로세스가 종료되지 않으며 소켓에 즉시 아무 일도 일어나지 않습니다.
그러나 프로세스가 실제로 종료되면 segfault 조건은 특별히 특별하지 않으며 shutdown(2) 시스템 호출과 유사하게 프로세스가 다른 방식으로 종료된 것처럼 소켓의 한쪽 끝이 닫힙니다.
소켓의 커널 버퍼에 데이터가 있는 경우 해당 데이터는 배수될 수 있습니다. (그러나 STDIO 버퍼에 기록되지 않은 데이터는 손실될 수 있습니다.) 소켓의 원격 끝은 마지막 데이터를 읽은 후 EOF를 확인하고 소켓에 쓰려고 하면 SIGPIPE 신호를 받습니다.