현생/TCP 소켓 프로그래밍
9-2. 소켓의 타입을 확인하는 소켓의 옵션 [TCP/IP][C][LINUX]
푸더기
2022. 1. 24. 22:34
반응형
프로토콜 레벨 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은 확인만 가능하고 변경이 불가능한 옵션 중 하나로, 소켓의 타입은 소켓 생성시 결정되면 변경이 불가능합니다.
반응형