13장 고급 입출력 함수 박사 4학기 최 성자.

Slides:



Advertisements
Similar presentations
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실 1 14 장. Out-of-Band Data System Software Lab. 이종호.
Advertisements

TCP 서버/클라이언트 동작 원리 - (1) TCP 서버/클라이언트 예 웹 서버 웹 클라이언트 웹 클라이언트
Network Lab. Byoung-Son, Choi
WSAAsync Select 김대열 Bit - Academy Sunmoon University, Korea.
10장. 소켓 입출력 모델(I) 블로킹과 넌블로킹 소켓의 특징을 이해한다. Select 소켓 입출력 모델을 이해하고 활용한다.
Image & Video processing
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Network Lab. Young-Chul Hwang
Department of Computer Science and Engineering
Passing Credentials And File Description
Department of Computer Engineering
소켓 모델 주소 지정 in_addr_t inet_addr(const char *ip_address) 연결 지향 모델 (TCP)
인공지능실험실 석사 2학기 김승겸 TCP/IP Socket Programming… 제 10장 멀티태스킹 기반의 서버구현 인공지능실험실 석사 2학기 김승겸
Signal & Inter-Process Communication
Network Lab. Seoung Hyeon, Lee
Department of Computer Science and Engineering
조 병 규 Software Quality Lab. 한국교통대학교
Multimedia & Mobile Communications Lab.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
제 12장 I/O멀티플렉싱(Multiplexing)
제 14장 Multicast & Broadcast
한남대학교 컴퓨터공학과 컴퓨터 네트워크 실험실
Department of Computer Engineering
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
Socket Address Structure and Byte Ordering Functions
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
고급 입출력 함수 School of Electronics and Information. Kyung Hee University.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
Signal & Inter-Process Communication
Socket Address Structure and Byte Ordering Functions
Department of Computer Engineering
Department of Computer Engineering
Chapter 06. UDP 서버/클라이언트.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
Advanced Socket Programming
School of Electronics and Information. Kyung Hee University.
Department of Computer Engineering
프로젝트 발표 순서 12/7(수), 팀 별 15분 발표순서 PPT (팀 별 이름, 구현 내용, 결과-그래프 포함) 각 기법당
프로젝트 시연 1M integer를 사용할 것 코드 부분 설명 (5~10분), 실행 ./lvm_write –L1M 4M
TCP/IP Socket Programming…
14장. 포인터와 함수에 대한 이해.
Socket Address Structure and Byte Ordering Functions
Socket Address Structure and Byte Ordering Functions
C++프로그래 밍 컴퓨터정보과 / 이기희교수.
11장. 1차원 배열.
소켓의 옵션 School of Electronics and Information. Kyung Hee University.
Department of Computer Engineering
Signal & Inter-Process Communication
Chapter 07. 소켓 옵션.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
24장. 파일 입출력.
TCP / IP 소켓 프로그래밍 3주차 ( Ch.10 ~ Ch.14 ).
School of Electronics and Information. Kyung Hee University.
Department of Computer Engineering
Signal & Inter-Process Communication
다중처리 기술 School of Electronics and Information. Kyung Hee University.
Chapter 04. TCP 서버/클라이언트.
Department of Computer Engineering
구조체(struct)와 공용체(union)
Department of Computer Engineering
06. 디바이스의 등록과 해제 김진홍
Signal & Inter-Process Communication
Network Lab. Young-Chul Hwang
윈도우에서의 유니코드.
Signal & Inter-Process Communication
Department of Computer Engineering
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

13장 고급 입출력 함수 박사 4학기 최 성자

13-1. Recv & send 함수

recv & send read & write 함수와 달리 데이터 입 출력 방법에 있어서 옵션 부여. 옵션의 종류와 의미. #include <sys/types.h> #include <sys/socket.h> int recv(int sock, void * buf, int len, unsigned int flags); int send(int sock, const void * buf, int len, unsigned int flags); [ 표 13-1 ] flags Description recv send MSG_DONTROUTE 데이터 전송 시 라우팅 테이블 참조 하지 않음.  MSG_DONTWAIT 넌-블록킹(non-blocking) I/O MSG_OOB 데이터 전송 시, 긴급 데이터(Out-of-band data) 전송 MSG_PEEK 버퍼에 데이터 유 무 확인

긴급 데이터 전송 시 생성되는 패킷 긴급 데이터 전송을 위한 패킷의 형성 긴급 데이터 전송의 특징. - 버퍼 상황에 관계 없이 데이터 전송 - Nagle 알고리즘 무시 [ 그림 13-4 : 출력 버퍼 ] [ 그림 13-4 : TCP 패킷]

긴급 데이터 전송 예제[MSG_OOB] [oob_send.c] write(sock, "123", 3); send(sock, "4", 1, MSG_OOB); //긴급 메시지 송신 write(sock, "567", 3); send(sock, "890", 3, MSG_OOB); //긴급메시지 송신, urgent point –offset:3, “0”송신 [oob.recv.c] 29: struct sigaction act; // 긴급 메시지 처리위해 구조체 선언 37: act.sa_handler=urg_handler; //긴급메시지 수신 핸들 대입 sigemptyset(&act.sa_mask); act.sa_flags=0; 57: fcntl(send_sock, F_SETOWN, getpid()); //소켓의 핸들 소유를 현재 프로세스 대입 state=sigaction(SIGURG, &act, 0); if(state != 0) error_handling("sigaction() error "); 62: while( (str_len=recv(send_sock, buf, sizeof(buf), 0)) != 0) { // 일반 메시지 72: void urg_handler(int signo) //긴급 메시지 루틴선언 //urgent point는 긴급 수신 메시지 마지막 바이트 다음 위치 설정됨 76: str_len=recv(send_sock, buf, sizeof(buf)-1, MSG_OOB); // 긴급 메시지 처리

긴급 데이터 전송 예제[MSG_OOB] [ 그림 13-2 ] [ 그림 13-3 ]

입력 버퍼 검사 예제[MSG_PEEK] [peek_send.c] write(sock, "123", 3); [peek_recv.c] sleep(1); str_len=recv(send_sock, buf, sizeof(buf)-1, MSG_PEEK|MSG_DONTWAIT); buf[str_len]=0; printf("총 %d 바이트 존재합니다 : %s\n", str_len, buf); str_len=recv(send_sock, buf, sizeof(buf)-1, 0); printf("읽어 온 결과 입니다. : %s\n", buf);

입력 버퍼 검사 예제[MSG_PEEK] [ 그림 13-7 ] [ 그림 13-8 ]

13-2. readv & writev 함수 저자 윤 성 우 ripeness21@empal.com

readv & writev 함수의 데이터 입 출력 방식 Array 1 Array 1 Array 2 출력 버퍼 Array 2 출력 버퍼 Array 3 Array 3 [write 3번 호출 ] [writev 1번 호출 ] 2. 데이터를 분산 수신(readv) Array 1 Array 1 입력 버퍼 Array 2 입력 버퍼 Array 2 Array 3 Array 3 [read 3번 호출 ] [readv 1번 호출 ]

readv & writev 함수의 사용 배열을 정의하기 위한 구조체의 선언. struct iovec { ptr_t iov_base; size_t iov_len; } [그림 13-9 ]

readv & writev 함수 호출 예제 [writev.c] struct iovec vec[2]; // 2개의 버퍼 연결 구조체 선언 char MSG1[]="Computer "; //버퍼1 char MSG2[]="Communications"; //버퍼2 int str_len; vec[0].iov_base=MSG1; 구조체와 버퍼 연결 vec[0].iov_len=strlen(MSG1); vec[1].iov_base=MSG2; 구조체와 버퍼 연결 vec[1].iov_len=strlen(MSG2); str_len=writev(1, vec, 2); //콘솔 통해서 2개의 버퍼의 데이타를 한번에 송신 [readv.c] struct iovec vec[2]; char MSG1[10]={0,}; char MSG2[10]={0,}; int str_len; vec[0].iov_base=MSG1; //구조체와 실제 버퍼 연결1 vec[0].iov_len=9; vec[1].iov_base=MSG2; //구조체와 실제 버퍼 연결1 vec[1].iov_len=9; str_len=readv(0, vec, 2); //두개의 버퍼로 나누어 수신 printf("\n총 %d 바이트 입력\n", str_len); printf("첫 번째 메시지 : %s \n", MSG1); printf("두 번째 메시지 : %s \n", MSG2);

readv & writev 함수 호출 예제 [ 그림 13-10 ] [ 그림 13-11 ]

13-3. 윈도우즈 기반의 이해

윈도우즈 기반 OOB 데이터 송 수신 윈도우즈 기반에서는 signal 핸들링 이라는 개념이 존재하지 않는다. select 함수는 소켓을 통해서 예외 상황(OOB 데이터 수신)이 발생 하였는지 확인하는 것이 가능하다. [oob_recv_win.c] result = select(fd_max+1, &readCopy, 0, &exceptCopy, &timeout); if(result>0) { if(FD_ISSET(hSendSock, &exceptCopy)){ strLen=recv(hSendSock, buf, BUFSIZE-1, MSG_OOB); buf[strLen]=0; printf("긴급 메시지 전송 : %s \n", buf); } if(FD_ISSET(hSendSock, &readCopy)){ strLen = recv(hSendSock, buf, BUFSIZE-1, 0); if(strLen ==0) break; else { puts(buf); [oob_send_win.c] send(hSocket, "123", 3, 0); send(hSocket, "4", 1, MSG_OOB); send(hSocket, "567", 3, 0); send(hSocket, "890", 3, MSG_OOB);

프로젝트생성 Setting -> *WS2_32.lib 추가 컴파일해야함