네트워크 프로그래밍 CH12. IO 멀티플렉싱

Alpha, Orderly·2023년 4월 19일
0

멀티 프로세스 서버

단점

  • 프로세스가 빈번히 생성되어 성능이 저하된다.
  • 멀티 프로세스 흐름을 고려해야 해 구현이 쉽지 않다.
  • 프로세스간 통신 필요시 구현이 복잡해진다.

대안

  • 하나의 프로세스가 다수의 클라이언트에게 서비스
  • 하나의 프로세스가 여러개의 소켓을 핸들링한다.
  • IO 멀티플렉싱

멀티플렉싱

  • 하나의 리소스를 둘 이상의 영역에서 공유하는것

select 함수

기능

  • 배열에 저장된 다수의 파일 디스크립터를 상대로
    • 수신한 데이터를 지닌 소켓이 있는지
    • 블로킹 없이 데이터 전송 가능한 소켓이 뭔지
    • 예외가 발생한 소켓이 뭔지


select 함수 소개

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

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

성공시 변화가 발생한 파일 디스크립터의 갯수를 리턴한다. 실패시 -1 반환
  • maxfd : 검사 대상의 파일 디스크립터 수
  • readset : 데이터를 읽어오는 소켓을 검사할때 사용
  • writeset : 데이터를 써야하는 소켓을 검사할때 사용
  • exceptset : 예외가 발생한 소켓을 검사할때 사용
  • timeout : select가 검사에 최대로 사용하는 시간을 표기한다.

호출 예시

fd_set 관련 매크로 함수

  • FD_ZERO(fd_set*)
    • fd_set 초기화
  • FD_SET(fd, fd_set*)
    • 파일 디스크립터를 fd_set에 추가하기
  • FD_ISSET(fd, fd_set*)
    • 파일 디스크립터가 설정 되어 있는지 확인하기
  • FD_CLR(fd, fd_set*)
    • 파일 디스크립터 설정 해제하기
  • fd_set은 구조체이기 때문에 대입이 가능하다!



profile
만능 컴덕후 겸 번지 팬

0개의 댓글