-
멀티플렉싱 SELECTIOT네트워크프로그래밍 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) 설정
timeout은 select() 호출할 때 얼마만큼의 시간을 기다릴 것인지를 지정하는데 사용된다.
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