반응형
지금까지 소켓을 생성하고 따로 설정을 하는 과정 없이 바로 사용해왔습니다. 이 경우 기본적으로 설정되어 있는 소켓의 특성으로써 데이터를 송수신하게 됩니다. 그러나 이미 활성화되어 있는 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()를 활용하는 예제를 가져오겠습니다.
반응형
'현생 > TCP 소켓 프로그래밍' 카테고리의 다른 글
9-3 입출력 버퍼를 다루는 소켓의 옵션 [TCP/IP][C][LINUX] (0) | 2022.01.24 |
---|---|
9-2. 소켓의 타입을 확인하는 소켓의 옵션 [TCP/IP][C][LINUX] (0) | 2022.01.24 |
8-2. 도메인 이름과 IP 간의 변환 [TCP/IP][C][LINUX] (0) | 2022.01.23 |
8-1. 도메인이란? 왜 쓰는 걸까? (0) | 2022.01.23 |
7. TCP 기반의 Half-close : shutdown() [TCP/IP][C][LINUX] (0) | 2022.01.21 |