인공지능실험실 박사 1학기 장성만 smjang@ai.hannam.ac.kr TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만 smjang@ai.hannam.ac.kr.

Slides:



Advertisements
Similar presentations
1 안드로이드 네트워킹 안드로이드 앱 프로그래밍 여 규리.
Advertisements

한남대학교 컴퓨터공학과 소프트웨어공학실험실 최 용 준
Network Lab. Byoung-Son, Choi
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
TCP/IP Socket Cover Slide 조태문.
Network Lab. Young-Chul Hwang
Department of Computer Science and Engineering
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
TCP/IP Socket Cover Slide 조태문.
Network Lab. Seoung Hyeon, Lee
Department of Computer Science and Engineering
Multimedia & Mobile Communications Lab.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 12장 I/O멀티플렉싱(Multiplexing)
제 14장 Multicast & Broadcast
Department of Computer Engineering
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
네트워크 프로그래밍 Yang-Sae Moon Department of Computer Science
Chapter 21 Network Layer: ARP, ICMP (IGMP).
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Homework 6… 12월 2일(금) 11:59pm까지 자신의 이름과 학번을 출력해 주는 유닉스/리눅스 네트워크 소켓 서버 프로그램 과 클라이언트 프로그램 을 작성해 보세요 참고 (실습1) Hello 프로그램 helloserver.c helloclient.c 컴파일.
Internet Address Conversion Functions
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
ARP Project 조 충 호 교수님 김 세 진 조교님 조 진 형 변 익 수
School of Electronics and Information. Kyung Hee University.
Department of Computer Science and Engineering
MicroC/OS-II 3. Memory Management ITISN Technical Lab.
13장 고급 입출력 함수 박사 4학기 최 성자.
TCP/IP Socket Programming…
14장. 포인터와 함수에 대한 이해.
Socket Address Structure and Byte Ordering Functions
Internet Address Conversion Functions
Socket Address Structure and Byte Ordering Functions
UDP Test 프로그램 분석.
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
Department of Computer Engineering
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Chapter 07. 소켓 옵션.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Internet Address Conversion Functions
Department of Computer Engineering
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
24장. 파일 입출력.
19. 함수 포인터와 void 포인터.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Department of Computer Engineering
Department of Computer Engineering
인터넷 주소변환 School of Electronics and Information. Kyung Hee University.
Canary value 스택 가드(Stack Guard).
제 19 장 TCP 대화식 데이터 흐름.
Chapter 04. TCP 서버/클라이언트.
Chapter 02. 윈도우 소켓 시작하기.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
Department of Computer Engineering
다자간 채팅프로그램 김형도 허영민
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 제 8장 도메인 이름과 인터네 주소 인공지능실험실 박사 1학기 장성만
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
Department of Computer Engineering
Network Lab. Young-Chul Hwang
Completion Port기반의 채팅프로그램
Department of Computer Science and Engineering
13. 포인터와 배열! 함께 이해하기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

인공지능실험실 박사 1학기 장성만 smjang@ai.hannam.ac.kr TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만 smjang@ai.hannam.ac.kr

목차 소켓의 옵션 SO_SNDBUF & SORCVBUF TCP_NODELAY 윈도우즈 기반으로 구현하기

소켓의 옵션 소켓의 옵션

소켓의 옵션 소켓의 옵션 열린 소켓 정보의 획득과 반환 Sock : 소켓 번호 #include <sys/types.h> #include <sys/socket.h> Int getsockopt(int sock, int level, int optname, void *optval, socklen_t *option 성공 시 0, 실패시 -1리턴 Sock : 소켓 번호 Level : 확인할 옵션의 프로토콜 레벨을 인자로 전달 SOL_SOCKET Optname : 확인할 옵션의 이름을 전달 Optval : optname으로 얻은 정보를 저장 Optlen : optval의 길이

소켓의 옵션 tcp_sock=socket(PF_INET, SOCK_STREAM,0); //tcp 소켓생성 udp_sock=socket(PF_INET, SOCK_DGRAM, 0);//udp소켓 생성 printf("SOCK_STREAM : %d \n", SOCK_STREAM); printf("SOCL_DGRAM : %d \n", SOCK_DGRAM); state=getsockopt(tcp_sock, SOL_SOCKET, SO_TYPE, &sock_type, &option); //소켓헝태 얻기 SO_TYPE if(state) error_handling("getsockopt() error"); printf("첫 번째 소켓의 타입은 %d\n", sock_type); state=getsockopt(udp_sock, SOL_SOCKET, SO_TYPE, &sock_type, &option); printf("두 번째 소켓의 타입은 %d\n", sock_type);

SO_SNDBUF & SO_RCVBUF 소켓 생성시의 기본 입출력 버퍼 확인 sock=socket(PF_INET, SOCK_STREAM, 0); //tcp 소켓 생성 len=sizeof(snd_buf); state=getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &snd_buf, &len); //출력 버퍼 크기 확인 if(state) error_handling("getsockopt() error"); len=sizeof(rcv_buf); state= getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcv_buf, &len); //입력 버퍼 크기 확인 printf("데이터 입력을 위한 소켓의 버퍼 크기 : %d \n", rcv_buf); printf("데이터 출력을 위한 소켓의 버퍼 크기 : %d \n", snd_buf);

SO_SNDBUF & SO_RCVBUF 소켓 생성시의 기본 입출력 버퍼 변경 state=setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcv_buf, sizeof(rcv_buf)); //출력 버퍼 크기 변경 state = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &snd_buf, sizeof(snd_buf)); //입력 버퍼 크기 변경 len=sizeof(snd_buf); state=getsockopt(sock, SOL_SOCKET, SO_SNDBUF, &snd_buf, &len); if(state) error_handling("getsockopt() error"); len=sizeof(rcv_buf); state=getsockopt(sock, SOL_SOCKET, SO_RCVBUF, &rcv_buf, &len); printf("데이터 입력을 위한 소켓의 버퍼 크기 : %d \n", rcv_buf); printf("데이터 출력을위한 소켓의 버퍼 크기 : %d \n", snd_buf);

SO_REUSEADDR 주소 할당 시 에러(Binding Error)의 발생 SO_REUESADD 시스템이 열린 소켓을 잡고 있기 때문 이 경우 시스템이 열린 소켓을 해제할 때 까지 기다리지 않고 SO_REUSEADD 옵션을 사용하여 bind() 에러 방지 1 2 Ctrl + C로 클라이언트 강제 종료 서버측 bind() 에러가 생기지 않음

SO_REUSEADDR 주소 할당 시 에러(Binding Error)의 발생방지 SO_REUESADD setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));

SO_REUSEADDR TIME-WAIT 상태 서버

SO_REUSEADDR 주소의 재활용 : SO_REUSEADDR 완전한 연결종료를 맺지 못해 길어진 TIME_WAIT

TCP_NODELAY Nagle 알고리즘 Nagle알고리즘 기존에 전송한 패킷이 있을경우 Nagle 알고리즘 미적용시 그 패킷에 ACK를 받아야 다음 전송을 진행하는 알고리즘 Nagle 알고리즘 미적용시 전송속도 향상효과 네트워크 트래픽에 부하증가

TCP_NODELAY Nagle 알고리즘의 중단요청 TCP_NODELAY 1(TRUE)로 설정 : Nagel 알고리즘 미적용 0(FALSE)로 설정 : Nagel 알고리즘 적용 /* 디폴트 nagle알고리즘 설정 상태 확인 */ state=getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len); printf(" 디폴트 nagel알고리즘 : %s \n", opt_val ? "비설정" : "설정"); /* nagel 알고리즘을 disable 시킨다*/ opt_val=TRUE; state=setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val,sizeof(opt_val)); /* 변경된 nagle 알고리즘 확인 */ getsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, &opt_len); printf("변경된 nagle 알고리즘 : %s \n",opt_val ? "비설정" : "설정");

윈도우 기반으로 구현하기 옵션의 설정과 참조 #include <winsock2.h> Int getsockopt( SOCKET s, //설정 상태를 변경하고자 하는 소켓의 핸들을 인자로 전달 int level, //변경할 옵션의 프로토콜 레벨을 인자로 전달 int optname, //변경할 옵션의 이름 전달 char FAR *optval //변경할 옵션의 값을 저장한 변수의 포인터를 전달 int FAR *optlen //optval 포인터가 가리키는 버퍼의 크기를 전달 성공 시 0, 실패시 SOCKET_ERROR 리턴 #include <winsock2.h> Int setsockopt( SOCKET s, //설정 상태를 변경하고자 하는 소켓의 핸들을 인자로 전달 int level, //변경할 옵션의 프로토콜 레벨을 인자로 전달 int optname, //변경할 옵션의 이름 전달 const char FAR *optval //변경할 옵션의 값을 저장한 버퍼의 포인터를 전달 int optlen //optval //전달되는 옵션 값의 바이트 단위 길이를 인자로 전달 성공 시 0, 실패시 SOCKET_ERROR 리턴

참고문헌 “UNIX Network Programming”, W.Richard Stevens “TCP/IP 소켓 프로그래밍”, 윤성우 저

Q & A