[소켓네트워크] - 비동기 모드 select() 함수
○ 비동기 모드 select() 함수 |
select() 입출력 다중화를 위해 소켓을 비동기 모드로 만드는 함수 timeval 에 지정한 시간동안 데이터가 들어왔는지 안들어왔는지 확인하는 함수
select( nfds, &read_fds, (fd_set *)0, (fd_set *)0, (struct timeval *)0 ); // 파일 디스크럽터수, read용, write용, 오류관련, 시간 설정
select() 처리 과정 FD_SET()을 통해 셋팅 -> select() 함수 실행 -> FD_ISSET() 통해 셋팅 되었나 확인
fd_set read_fds; nfds = s_socket;
FD_ZERO(&read_fds); // select 쓰기전 초기화 FD_SET(s_socket, &read_fds); // 서버 소켓 셋팅
for(i=0; i<MAX_CLIENT; i++) { if( list_c[i] != INVALID_SOCK ) { // 클라이언트 소켓 번호들 셋팅 FD_SET(list_c[i], &read_fds); if( list_c[i] > nfds ) nfds = list_c[i]; } } nfds++;
select( nfds, &read_fds, (fd_set *)0, (fd_set *)0, (struct timeval *)0 ); // 데이터 입출력 확인
if(FD_ISSET(s_socket, &read_fds)){ ~ } // 서버 소켓 셋팅 되었나 확인 if(( list_c[i] != INVALID_SOCK) && FD_ISSET(list_c[i], &read_fds )){ ~ } // 클라이언트로부터 채팅 데이터 도착 했는지 확인
|
'소켓네트워크' 카테고리의 다른 글
[소켓네트워크] - FTP 모드 및 LOGIN, GET, PUT (0) | 2017.06.11 |
---|---|
[소켓네트워크] - 병행 처리 위한 쓰레드 생성 및 활용 (0) | 2017.06.11 |
[소켓네트워크] - 데몬 서버(Daemon Server) (0) | 2017.06.11 |
[소켓네트워크] - 아파치 웹 서버의 환경 설정(우분투용) (0) | 2017.06.11 |
[소켓네트워크] - html 요청 라인 vs 상태 라인 (0) | 2017.06.11 |