SELECT 의 MAXFD
글쓴이: gnugpl / 작성시간: 화, 2003/06/24 - 1:18오후
select에서 maxDescPlus1가 의미하는 바를 정확히 모르겠습니다.
READ, WRITE, EXCEPTION의 세백터의 모든 가능한 백터 위치들을 탐색하는것을 피하게 하기 위해서라고 하는데?
정확히 무슨 의미인지요?
fd_set은 다음과 같습니다.
#define __FD_SETSIZE 1024
typedef long int __fd_mask;
#define __NFDBITS (8 * sizeof (__fd_mask))
__fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
다시 정리해서 질문하면
select에게 모든 가능한 위치들을 탐색하는것을 피한다는 의미가 무엇인지요?
2번째 질문은
select를 매번할시마다 FD_ZERO를 통해 초기화 해야 하는 이유가 궁금합니다. 적절하게 FD_CLR이나 SET을 통해 fd_set을 구성하면 안되는지요?
감사합니다.
Forums:
효율 때문이죠..
select 할때 maxfd + 1을 지정하는 이유가
#define __FD_SETSIZE 1024
이렇게 지정되어 있으면
0번부터 1023번까지 쭈욱 체크를 해보아야 하는데
maxfd만큼만 돌면 그만큼 효율적이겠네요
그리고 매번 초기화 하는 이유는
"적절하게 FD_CLR이나 SET" 하셔도 무방하지만
select가 read_set이나 write_set등의 값을 변경시키기 때문에
정확한 동작을 위해서 fd_zero로 지워주고 다시 관심있는 fd를
등록해주는게 명확하지요..
(저는 마스터 fd_set 를 두고 이것의 복사본을 select에 넣어줍니다.)
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
댓글 달기