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);
해당 소켓과 송수신을 할 수 없다.