현생/TCP 소켓 프로그래밍
9-1. 소켓의 옵션과 설정 함수 get/setsockopt [TCP/IP][C][LINUX]
푸더기
2022. 1. 24. 22:29
반응형
지금까지 소켓을 생성하고 따로 설정을 하는 과정 없이 바로 사용해왔습니다. 이 경우 기본적으로 설정되어 있는 소켓의 특성으로써 데이터를 송수신하게 됩니다. 그러나 이미 활성화되어 있는 PORT 번호에 할당을 하게 하는(SO_REUSEADDR) 등 소켓의 특성을 변경시켜야 하는 경우도 발생합니다.
소켓의 옵션은 많은 종류가 존재하는데, 프로토콜 레벨로 나눴을 때 SOL_SOCKET, IPPROTO_IP, IPPROTO_TCP가 존재합니다. 각 레벨에는 여러 옵션들이 있는데, 예를 들어 SOL_SOCKET 프로토콜 레벨에는 SO_TYPE 옵션이 있습니다.
먼저 옵션을 참조하고 변경하는 함수를 살펴보겠습니다.
#include<sys/socket.h>
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
// success: 0 fail: -1
// sock: 옵션 확인을 위한 소켓의 파일디스크립터
// level: 확인할 옵션의 프로토콜 레벨
// optname: 확인할 옵션의 이름
// optval: 확인결과의 저장을 위한 버퍼의 주소 값
// optlen: optval의 주소 값의 바이트 단위 크기를 담고 있는 변수의 주소 값,
// 이 변수에 네 번째 인자를 통해 반환된 옵션 정보의 크기 바이트 단위로 저장
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);
// success: 0 fail: -1
// sock: 옵션 변경을 위한 소켓의 파일 디스크립터
// level: 변경할 옵션의 프로토콜 레벨
// optname: 변경할 옵션의 이름
// optval: 변경할 옵션정보를 저장한 버퍼의 주소 값
// optlen: optval의 주소 값의 바이트 단위 크기
getsockopt() 함수로 소켓의 특정 옵션을 확인할 수 있고, setsockopt() 함수로 소켓의 특정 옵션을 변경할 수 있습니다.
다음 글에서 getsockopt(), setsockopt()를 활용하는 예제를 가져오겠습니다.
반응형