반응형
프로토콜 레벨 SOL_SOCKET에 있는 SO_TYPE 옵션은 소켓의 타입정보를 확인하는 옵션입니다.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
void error_handling(char *message);
int main(int argc, char *argv){
int tcp_sock, udp_sock;
int sock_type;
socklen_t optlen;
int state;
optlen=sizeof(sock_type);
// tcp/udp 소켓 생성
tcp_sock=socket(PF_INET, SOCK_STREAM, 0);
udp_sock=socket(PF_INET, SOCK_DGRAM, 0);
//tcp/udp 소켓 생성 시 2번째 인자로 들어간 상수 값 출력
printf("SOCK_STREAM: %d\n",SOCK_STREAM);
printf("SOCK_DGRAM: %d\n",SOCK_DGRAM);
//tcp소켓의 타입정보 얻음.
state=getsockopt(tcp_sock, SOL_SOCKET, SO_TYPE, (void*)&sock_type, &optlen);
if(state)
error_handling("getsockopt() error");
printf("Sock type one: %d\n", sock_type);
//udp소켓의 타입정보 얻음.
state=getsockopt(udp_sock, SOL_SOCKET, SO_TYPE, (void*)&sock_type, &optlen);
if(state)
error_handling("getsockopt() error");
printf("Sock type two: %d\n", sock_type);
return 0;
}
void error_handling(char *message){
fputs(message, stderr);
fputc('\n',stderr);
exit(1);
}
SOCK_STREAM의 값과 SOCK_DGRAM의 값은 각각 1, 2입니다.
getsockopt() 함수로 얻어 낸 두 소켓의 타입정보는 각각 1과 2로 위 상수와 동일합니다.
또, SO_TYPE은 확인만 가능하고 변경이 불가능한 옵션 중 하나로, 소켓의 타입은 소켓 생성시 결정되면 변경이 불가능합니다.
반응형
'현생 > TCP 소켓 프로그래밍' 카테고리의 다른 글
9-4 이미 할당된 PORT번호에 재할당하는 소켓의 옵션 [TCP/IP][C][LINUX] (0) | 2022.01.25 |
---|---|
9-3 입출력 버퍼를 다루는 소켓의 옵션 [TCP/IP][C][LINUX] (0) | 2022.01.24 |
9-1. 소켓의 옵션과 설정 함수 get/setsockopt [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 |