C언어 header/sys | socket.h
shutdown(2) - 읽기 / 쓰기 금지 설정
자연&사람
2019. 9. 29. 22:04
반응형
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 응용
반응형