티스토리 뷰
what? 무엇?
소켓 프로그램에서 소켓의 디폴트 설정 값을 그래도 사용하는 경우가 아니라 TCP/IP 프로토콜의 세부적인 기능을 활용하거나 소켓의 동작의 특성을 변경할 수 있다. 이때, 사용하는 것을 소켓 옵션이라고 한다.
HOW? 어떻게 사용?
소켓 옵션을 변경하는 방법과 멀티캐스트 패킷을 송수신하는 방법 및 멀티캐스트를 이용한 채팅 프로그램을 작성하며 알아보자.
*소켓옵션 변경 함수
int getsockopt(int s int level., int opt, const char *optval, int *optlen);
- 소켓 s에 지정되어있는 옵션 값을 알아내기 위해 사용하는 getsockopt
int setsockopt(int s, int level, int opt, const char *optval, int optlen);
-소켓 s의 옵션을 변경하기 위해서 사용하는 setsockopt
<설명>
-level : 프로토콜 레벨을 지정(socket레벨 옵션이면 SOL_SOCKET, IP프로토콜에 관한 옵션이면 IPPROTO_IP를 사용, TCP에 관한 옵션이면 IPPROTO_TCP를 선택)
- opt : opt인자는 변경할 또는 읽을 옵션을 지정
- optval : 지정하려는 또는 읽으려는 옵션 값을 가리키는 포인터
- optlen : 옵션의 길이를 나타내는 정수값

=> 옵션 중 어떤 상태의 선택 또는 취소로 둘중 하나를 택하는 옵션이 있다.
옵션을 지정할 때 1이면 선택이고 0이면 취소
WHY? 왜필요?
소켓의 기본 디폴트 설정 값이 아니라 세부적인 기능 및 동작의 특정을 조절하고 싶을 경우 소켓 옵션을 사용한다.
<소켓 옵션 변경 예>
IP레벨의 옵션중 ttl값을 출력해보고 TTL값을 32로 바꾸는 코드를 작성해보자.
int ttl, optlen;
int ttl, optlen;
getsockopt(s, IPPROTO_IP, IP_TTL, &ttl, &optlen);
printf("TTL = %d\n", ttl);
ttl=32;
setsockopt(s, IPPROTO_IP, IP_TTL, &&ttl, sizeof(ttl));
printf("TTL = %d\n", *ttl);
소켓레벨옵션 중 keep alive 동작을 선택하는 코드를 작성해보자.
int set=1;
setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &set, sizeof(set));
TCP 소켓을 개설하고 디폴트 수신 버퍼의 크기를 확인후 사용자가 임의의 크기(여기서는 1024)로 변경해보는 코드를 작성해보자.
#include <stdio.h
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main()
{
int s;
int val, len;
if((s = socket(AF_INET, SOCK_STREAM, 0))<0){
perror("socket fail");
exit(1);
}
len = sizeof(val);
if(getsockopt(s, SOL_SOCKET, SO_RCVBUF, &val, &len)<0){
perror("socket fail");
exit(1);
}
printf("default value : %d\n, val);
val= 1024;
setsockopt(s, SOL_SOCKET, SO_RCVBUF, &val, sizeof(val));
getsockopt(s, SOL_SOCKET, SO)RCVBUF, &val, &len);
printf("1024로 변경한 수신버퍼의 크기 : %d\n", val);
return 0;
}
'네트워크프로그래밍' 카테고리의 다른 글
세마포어(2) (0) | 2021.05.31 |
---|---|
세마포어 (0) | 2021.05.31 |
네트워크프로그래밍 - FIFO (0) | 2021.05.15 |
네트워크 프로그래밍 -PIPE (0) | 2021.05.15 |
CSMA/CD란? (0) | 2021.04.09 |
- Total
- Today
- Yesterday
- DRF 회원관리
- CSMA/CD란?
- LAMBDA
- 핀테크 트렌드
- mm1queue
- 딥러닝입문
- 10866 백준
- 백준 숫자놀이
- 11053 백준
- 13886
- 백준 10866
- 모듈 사용법
- stack 컨테이너
- 코딩월드뉴스
- 기본 텍스트 분류
- 기사작성 대외활동
- 백트래킹(1)
- CREATE ASSERTION
- 온라인프로필 만들기
- 백준 11053 파이썬
- 백준 15650 파이썬
- 시뮬레이션 c
- 파이썬 알아두면 유용
- 4963 섬의개수
- 효율적인방법찾기
- 백준 4963
- c++덱
- 소프트웨어공학설계
- 영화 리뷰 긍정 부정 분류
- 스택 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |