shutdown() 함수 와 close() 함수 질문드립니다.

poplinux의 이미지

다음과 같은 형태로 소켓을 연결하는 구조입니다.

while(1)
{
connect()
send()
close() or shutdown()
}

한번 접속하고 계속 사용하는게 아니라 메시지를 전송할 때마다 접속하는 형태입니다.

위와 같이 작성할 때 close_wait 상태에 빠지는 것을 방지하기 위해서 shutdown() 함수를 사용합니다.

shutdown() 함수를 사용한 다음에 close() 함수를 사용해서 소켓을 닫아 주어야 하는 것인지 아니면 shutdown() 함수만 쓰면 되는 것인지 궁금합니다.

ssehoony의 이미지

shutdown 함수만 사용하면 됩니다.

헌데 close_wait 을 제거하기 위해 shutdown 을 사용하셨다는 것은 조금 의외이네요.
OS에 따라 작동방식이 있을 테니 shutdown 의 결과가 그런식으로 나올 수 있겠지만
근본적으로 close 와 shutdown 의 차이는 close_wait 이 아니거든요.

close_wait 은 tcp time wait interval 옵션을 이용해서 처리하는게 일반적인 방법이라고 생각이 드네요.