728x90
select 에서 사용하는 fd 는 최대 1024 개이다.
최대값을 변경하기 위해서는 "/usr/include/bits/typesizes.h" 의 __FD_SETSIZE 값을 변경하고, 컴파일해야한다.
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
참고로, fd 와 관련된 상수값들은
- "/usr/include/sys/select.h"
typedef long int __fd_mask;
#define __NFDBITS (8 * sizeof (__fd_mask))
typedef struct
{
__fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
} fd_set;
fd_set 를 살펴보면, 32 bit 에서는 fd_set 이 int32_t __fds_bits[32] 를 멤버를 가지고, 64 bit 에서는 int64_t __fds_bit[16] 를 멤버를 가진다. 결국 1024 개의 비트를 가지게 된다.
BSD 계통에서는 어떻게 되어 있는게 보니, FD_SETSIZE 가 256 으로 선언이 되어 있다.
/* * Implementation dependent defines, hidden from user space. X/Open does not * specify them. */ #define __NBBY 8 /* number of bits in a byte */ typedef __int32_t __fd_mask; /* bits per mask */ #define __NFDBITS ((unsigned int)sizeof(__fd_mask) * __NBBY) #define __howmany(x, y) (((x) + ((y) - 1)) / (y)) /* * Select uses bit masks of file descriptors in longs. These macros * manipulate such bit fields (the filesystem macros use chars). * FD_SETSIZE may be defined by the user, but the default here should * be enough for most uses. */ #ifndef FD_SETSIZE #define FD_SETSIZE 256 #endif typedef struct fd_set { __fd_mask fds_bits[__howmany(FD_SETSIZE, __NFDBITS)]; } fd_set;
'Engineering > Network' 카테고리의 다른 글
snort inline 정리.... 시작 (0) | 2010.08.25 |
---|---|
unix socket 을 이용하는 예제 (0) | 2010.06.24 |
채팅 서버 - epoll 버전 (0) | 2010.06.14 |
채팅 서버(윈도우용) - select 버전 (0) | 2010.06.14 |
채팅 클라이언트(윈도우용) (0) | 2010.06.14 |