← 질문 목록
#349깊이 0

소켓 close()와 shutdown()의 차이는 무엇인가?

네트워크

close()는 소켓 소유권을 포기하고 읽기와 쓰기를 모두 닫는 반면, shutdown()은 파일 디스크립터를 유지한 채 송수신 방향을 선택해서 닫기 때문이다.

기준close()shutdown()
FD 반납즉시 반납한다유지한다
방향 제어읽기와 쓰기를 모두 닫는다SHUT_RD, WR, RDWR 선택
참조 카운트카운트가 0일 때만 FIN 전송카운트와 무관하게 FIN 전송

close()는 프로세스가 해당 파일 디스크립터를 완전히 내려놓는다. 이때 참조 카운트가 0이 되어야 비로소 상대에게 FIN 패킷을 보낸다.

shutdown()은 참조 카운트와 상관없이 지정한 방향의 연결을 즉시 끊는다. 쓰기만 닫아 상대에게 FIN을 보내고 읽기는 유지하는 Half-close를 구현할 때 쓴다.

fork()로 디스크립터를 공유하는 환경에서 close()를 부르면 다른 프로세스가 소켓을 쥐고 있어 연결이 안 끊길 수 있다. 이때 확실히 FIN을 보내려면 shutdown()을 쓴다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

소켓 close()와 shutdown()의 차이는 무엇인가?