반응형
shutdown(2)
#include <sys/socket.h>
int shutdown(int sockfd, int how);
shutdown(2)은 socket을 close하지는 않고 recv기능 또는 send 기능을 못하도록 일부 기능을 제한하는 함수입니다. shutdown(2)을 통하여 socket의 recv 기능 및 send 기능을 사용하지 못하게 하면 다시 그 기능을 살릴 수 없습니다. 또한 recv 기능 및 send 기능을 모두 사용하지 못하게 하여도 socket이 close된 것은 아닙니다.
파라미터
sockfd
- socket(2) 또는 accept(2) 등으로 생성한 socket descriptor.
how
- 어떤 기능을 제한할 것인지를 설정하는 값.
SHUT_RD : 읽기(수신) 기능을 사용하지 못하도록 설정합니다.
SHUT_WR : 쓰기(전송) 기능을 사용하지 못하도록 설정합니다.
SHUT_RDWR : 읽기/쓰기를 모두 사용하지 못하도록 설정합니다. 그러나 socket이 close되지는 않았습니다.
RETURN
0
- 정상적으로 기능 제한이 되었습니다.
-1
- 오류가 발생하였으며, 오류에 대한 상세 내용은 errno 전역변수에 설정됩니다.
EBADF : sockf가 유효하지 않은 socket descriptor입니다.
EINVAL : how값을 잘못 설정하였습니다.
ENOTCONN : connect된 socket이 아닙니다.
ENOTSOCK : socket descriptor가 아닙니다.
활용 예제
#include <sys/socket.h>
......
if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
fprintf(stderr, "Socket 생성 오류: %s\n", strerror(errno));
return -1;
}
if(connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr_in)) == -1) {
fprintf(stderr, "Connection Error: %s\n", strerror(errno));
close(sock);
return -1;
}
if(shutdown(sock, SHUT_RD) == -1) { // 읽기 기능을 차단합니다.
fprintf(stderr, "Shutdown Error: %s\n", strerror(errno));
return -1;
}
......
see also : Socket 통신과 Socket 응용
반응형
'C언어 header > sys | socket.h' 카테고리의 다른 글
getsockname(2) - who am I? (나는 누구일까?) (0) | 2019.09.29 |
---|---|
getpeername(2) - who are you? (너는 누구니?) (0) | 2019.09.29 |
connect(2) - 서버로 접속하기 (0) | 2019.09.29 |
accept(2) / accept4(2) - client와 연결된 새로운 socket 생성 (0) | 2019.09.29 |
listen(2) - client가 접속할 수 있도록 준비 작업 (0) | 2019.09.29 |