select 함수의 대한 의문점..
안녕하세요
갓 IT업계에 뛰어든 초보 개발자입니다.
하나 의문점이 드는데요
select 함수에서..
//=======================================================================================
int select ( int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout )
n : 검사 대상이 되는 파일 디스크립터의 수
readfds : "입력 스트림에 변화가 발생했는지" 확인하고자 하는 소켓들의 정보를 전달한다. 여기서 입력 스트림에 변화가 발생했다는 것은 수신할 데이터가 있다는 뜻이다.
writefds : "데이터 전송 시, 블로킹되지 않고 바로 전송이 가능한지" 확인하고자 하는 소켓들의 정보를 전달한다.
exceptfds : "예외가 발생했는지" 확인하고자 하는 소켓들의 정보를 전달한다.
timeout : 함수 호출 후, 무한 대기 상태에 빠지지 않도록 타임-아웃을 설정하기위해 인자를 전달한다
//=======================================================================================
마지막 인자인 timeout에..
timeout.tv_sec = 0;
timeout.tv_usec = 0;
이것과..
NULL 을 넣는것과의 차이점이 무엇인가요..?
select를 사용하여 서버를 구현하고 있습니다.
클라이언트가 접속하면 shared memory에서 데이터를 읽어 클라이언트에게 브로드캐스팅하는 구조입니다.
그런데..
timeout의 시간을 0초로 설정하면 잘되는데
NULL로 설정하면 블럭이 걸립니다.
이상한데요.. 이유가 무엇일까요..? ;;
man page에서
man page에서
즉, timeout값이 0일 경우에는 폴링에 해당되며, timeout이 NULL일 경우에는 타임아웃의 상한선이 없다는 의미로 해석되어 I/O가 발생하지 않으면 블록됩니다.
--------------
save the earth
생산적인 댓글을 달자
댓글 달기