Select 함수 -------------------------------------------------------------------------------------------------------
하나의 소켓 하나의 쓰레드로 여러개의 소켓을 관리하는 방식인 멀티플렉싱은 다음의 Select함수를 사용하여 구현할 수 있다.(다른 함수나 로직은 아직 배우지 않았다.)
함수의 구조는 다음과 같다.
int select(
_In_ int nfds, -> 동시에 관리할 소켓의 개수
_Inout_ fd_set *readfds, -> fd_set형 수신된 데이터의 존재여부에 관심 있는 소켓 정보를 모두 등록해서 그 변수의 주소값을 전달한다.
_Inout_ fd_set *writefds, -> fd_set형 블로킹 없는 데이터 전송의 기능여부에 관심있는 소켓정보를 모두 등록해서 그 변수의 주소 값을 전달한다.
_Inout_ fd_set *exceptfds, -> fd_set형 '예외상황의 발생여부'에 관심이 있는 파일 디스크립트 정보를 모두 등록해서 그 변수의 값을 전달한다.
_In_ const struct timeval *timeout -> select 함수 호출 이후 무한정 블로킹 상태에 빠지지 않도록 타임아웃을 설정하기 위한 인자를 전달한다.
); -> 오류발생시에는 -1이 반환되고 타임아웃에 의한 반환 시에는 0이 반환된다. 그리고 관심 대상으로 등록된 소켓에 해당 관심에 관련된 변화가 발생하면 0보다 큰 값이 반환된다. 이 값은 변화가 발생한 소켓의 수를 의미한다.
fd_set 구조체 -----------------------------------------------------------------------------------------------------
fd_set 구조체에 대해서 알아봅시다.
'게임개발공부 > 서버 공부' 카테고리의 다른 글
열혈강의 TCP/IP <Overlapped IO, IOCP> (0) | 2013.12.08 |
---|---|
열혈강의 TCP/IP <비동기 송수신 방식> (0) | 2013.12.07 |
열혈강의 TCP/IP <멀티 프로세스와 멀티 플렉싱> (0) | 2013.12.01 |
열혈강의 TCP/IP <소켓의 옵션과 입출력 버퍼 소켓의 옵션 재설정> (0) | 2013.12.01 |
열혈강의 TCP/IP <인터넷 도메인이름과 인터넷 주소> (0) | 2013.11.30 |