본문 바로가기

공부/tcp/ip 프로그래밍

12장 IO멀티플렉싱

반응형

멀티프로세스구조IO멀티플렉싱.pptx

                                                                      

IO멀티플렉싱

 

select함수의 단점

1. 전체 파일디스크립터가 나타나는 배열에 생성되어 검사의 대상이 되는 파일디스크립터만 1로 표시하여 일일히 손으로 배열에 넣어 놓아야 함
2. 변화가 있는 파일디스크립터 뿐 아니라 변화가 없는 파일디스크립터까지 나타나 있는 배열을 받아서 일일히 for문을 통해서 1로 표시된 변화가 생긴 파일디스크립터가 무엇인지 찾아야 함

select 함수

 

fd_set형 변수에 값을 등록, 변경 등에 관한 함수

FD_ZERO(fd_set* fdset)

인자로 전달된 주소의 fd_set형 변수의 모든 비트를 0으로 초기화

 

FD_SET(int fd, fd_set* fdset)

매개변수 fdset으로 전달된 주소의 변수에 매개변수 fd로 전달된 파일 디스크립터 정보를 등록

 

FD_CLR(int fd, fd_set* fdset)

매개변수 fdset으로 전달된 주소의 변수에서 매개변수 fd로 전달된 파일 디스크립터 정보를 삭제

 

FD_ISSET(int fd, fd_set* fdset)

매개변수 fdset으로 전달된 주소의 변수에 매개변수 fd로 전달된 파일 디스크립터 정보가 있으면 양수를 반환

 

select함수

#include <sys/select.h>
#include <sys/time.h>

 

int select(int maxfd, fd_set* readset, fd_set* writeset, fd_set* exceptset, const struct timeval* timeout);

성공시 0이상, 실패시 -1 반환

 

maxfd : 검사 대상이 되는 파일 디스크립터의 수

readset : fd_set형 변수에 '수신된 데이터의 존재여부'에 관심 있는 파일 디스크립터 정보를 모두

             등록해서 그 변수의 주소 값을 전달

writeset : fd_set형 변수에 '블로킹 없는 데이터 전송의 가능여부'에 관심 있는 파일 디스크립터

             정보를 모두 등록해서 그 변수의 주소 값을 전달

exceptset : fd_set형 변수에 '예외상황의 발생여부'에 관심이 있는 파일 디스크립터 정보를 모두

                등록해서 그 변수의 주소 값을 전달

timeout : select 함수호출 이후에 무한정 블로킹 상태에 빠지지 않도록 타임아웃(time-out)을

             설정하기 위한인자를 전달

반환 값 : 오류발생시에는 -1이 반환되고, 타임 아웃에 의한 반환 시에는 0이 반환.

              그리고 관심대상으로 등록된 파일 디스크립터에 해당 관심에 관련된 변화가

              발생하면 0보다 큰 값이 반환되는데, 이 값은 변화가 발생한 파일 디스크립터의 수를 의미

struct timeval

{

long tv_sec;   //seconds

long tv_usec; //microseconds

}

 

반응형