네트워크 통신을 위해 TCP 소켓을 하는 도중, 소켓을 닫아서 연결을 끊고 싶을 때가 있습니다.
오늘은 소켓을 종료하는 방법에 대해 알아보겠습니다.
종료하는 방법은 간단합니다.
소켓을 종료하는 함수를 호출하면 됩니다.
1. close 함수
int close(int socket_fd)
소켓 디스크립터를 인자로 받고, 성공했을 경우 0을, 실패할 경우 -1을 리턴합니다.
close함수를 호출할 경우, 호출한 쪽의 소켓을 닫아 버립니다. 현재 전송중인 데이터를 소멸시켜버립니다.
close 함수는 인자로 전달된 socket_fd의 참조 카운터를 하나 감소시킵니다.
참조 카운터가 0이 된다면, socket_fd를 종료시키게 됩니다.
참조 카운터가 0이 아니라면, socket_fd를 종료시키지 않겠죠?
2. shutdown 함수
int shutdown(int socket_fd, int how_to)
소켓 디스크립터와 how_to를 인자로 받고, 성공했을 경우 0을, 실패할 경우 -1을 리턴합니다.
close 함수와 달리, 함수를 호출할 경우, 소켓을 닫아 버리지만, read/write 버퍼 중 하나를 선택하여 닫을 수 있습니다.
shutdown 함수는 close함수와 달리 how_to인자가 더 있고, read 버퍼나 write 버퍼를 넣을 수 있습니다.
how_to 인자는 아래와 같은 값이 있습니다.
1) SHUT_RD
->소켓으로의 read 버퍼를 닫아서, 수신을 할 수 없게 합니다.
2) SHUT_WD
->소켓으로의 write 버퍼를 닫아서, 송신을 할 수 없게 합니다.
3) SHUT_RDWD
->소켓으로의 read/write 버퍼를 닫아서, 수신/송신을 할 수 없게 합니다.
소켓 닫는 방법에 대해 알아보았습니다.
'프로그래밍 > C' 카테고리의 다른 글
[C] exec 계열의 함수 (0) | 2019.11.05 |
---|---|
[C] 배열(array)과 연결리스트(linked list) (0) | 2019.06.19 |
[C] incompatible implicit declaration of built-in function (0) | 2018.08.06 |
[C] _AT_ 키워드 (0) | 2018.08.01 |
[C]curl 라이브러리 curl_easy_setopt() 옵션 정보(2) (0) | 2018.05.30 |