아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
슬거운나팔새145
슬거운나팔새14521.02.17

shutdown 과 close의 차이?

안녕하세요 ~^^vvvvv

코딩하다가 모르는게 있어서 질문좀 하려구용~~~ㅂ

서버를 작성중인데

소켓프로그래밍시에 shutdown종료와 close종료의 차이는 무엇인가요?

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • 1. close()

    int close(int socket_fd);

    성공하면 0을, 실패하면 -1을 반환합니다.

    close()함수는 매개변수로 전달된 socket_fd 소켓의 참조 카운터를 1 감소시키며 참조 카운터가 0이 되면 해당 소켓을 종료합니다.

    소켓을 종료하면서 동시에 recv buffer와 send buffer를 차단하기 때문에 close함수를 통해 소켓이 종료되고 난 시점 이후 부터는 더이상 통신을 주고받을 수가 없습니다.

    2. shutdown()

    int shutdown(int socket_fd, int how_to);

    마찬가지로 성공하면 0, 실패하면 -1을 반환하며, shutdown 함수는 close와 마찬가지로 소켓을 종료하지만 두번째 매개변수인 how_to에 어떤 값을 넣느냐에 따라 read buffer와 write buffer를 차단할지를 선택할 수 있습다.

    how_to 상수

    • SHUT_RD : recv buffer 만 차단

      shutdown(s, SHUT_RD);

      해당 소켓으로 부터 수신할 수 없다.

    • SHUT_WR : send buffer 만 차단

      shutdown(s, SHUT_WR);

      해당 소켓과 송신을 할 수 없다.

    • SHUT_RDWR : 두 버퍼 모두를 차단

      shutdown(s, SHUT_RDWR);

      해당 소켓과 송수신을 할 수 없다.