ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 멀티플렉싱 SELECT
    IOT네트워크프로그래밍 2021. 11. 2. 19:54

    멀티 프로세스 서버(fork)의 단점

    성능이 점점 저하된다.

    구현이 쉽지 않다.

    프로세스 통신이 필요할 한 상황에서 서버 구현이 복잡하다.

    -> 그 대안으로 나온 것이 IO 멀티플렉싱이다.

    멀티플렉싱

    실전화기로 나타낸 것이다.

    왼쪽은 하나의 리소스를 둘 이상의 영역에서 공유하는 것을 가리키는 것을 멀티 플렉싱이라고 한다.

    Select 함수의 기능과 호출 순서

    fd_set 자료형 데이터 조작함수
    FD_ZERO(fd_set *fdset) *fdset의 모든 비트를 0으로
    FD_SET(int fd, fd_set *fdset) *fdset 중 소켓 fd에 해당하는 비트를 1로 
    FD_CLR(int fd, fd_set *fdset) *fdset 중 소켓 fd에 해당하는 비트를 0으로
    FD_ISSET(int fd, fd_set *fdset) *fdset 중 소켓 fd에 해당하는 비트가 1이고, 
    					소켓에 I/O 변화가 생겼으면 true를 리턴

    타임 아웃(time out) 설정

    timeoutselect() 호출할 때 얼마만큼의 시간을 기다릴 것인지를 지정하는데 사용된다.

    select 함수

    int select(int maxfd, // 검사 대상이 되는 파일 디스크립터의 수
    fd_set * readfds, 	  // fd_set형 변수의 관심 있는 정보를 모두 등록해서 그 변수의 주소 값 전달
    fd_set * writefds,	  // 블로킹 없는 데이터 전송의 가능 여부에 관심 있는 파일 디스크립터 정보 전달
    fd_set * exceptfds,   // 예외 상황의 발생 여부에 관심 있는 파일 디스크립터 정보 전달
    struct timeval * timeout // 무한 블로킹 상태에 빠지지 않도록 타임아웃을 설정하기 위한 인자 전달
    );
    
    // 반환값
    // -1 : 오류
    //  0 : 타임 아웃에 의한 반환
    // < 0: 관심대상으로 등록된 파일 디스크립터에 해당 관심에 관련된 변화가 발생 -> 변화가 발생한
    //		파일 디스크립터의 수

    select 함수호출 이후의 결과

    변화가 발생한 파일 드스크립터만 1로 설정되고, 나머지는 모두 0으로 초기화 된다.

    파일 디스크립터와 select 함수를 이용해서 통신을 할 수 있다.

    'IOT네트워크프로그래밍' 카테고리의 다른 글

    멀티캐스트와 브로드 캐스트  (0) 2021.10.19
    멀티쓰레드 기반의 서버구현  (0) 2021.10.12
    다중 접속 서버  (0) 2021.10.05
    UDP기반의 Client/Server  (0) 2021.09.28
    TCP 기반의 Client / Server  (0) 2021.09.28

    댓글

Designed by Tistory.