select 소켓을 사용하려고 하는데요...

neodeath의 이미지

select 소켓으로 동접 몇천정도되는 어플리케이션을 만드려고 하는데요
리눅스는 ubuntu를 쓰고있는데
따로 커널 세팅이나
OS 세팅을 해줘야하는 부분이 있는지요
서버 소켓에서 클라이언트 accept이벤트는 떨어지는데요
서버 client 소켓에서 select이벤트(read) 가 안떨어지네요...
os ubuntu , g++ 쓰고 있습니다.

답변부탁드립니다

IsExist의 이미지

간단한 코드 snip 정도는 올려주어야 도움을 드릴수 있을듯요.
실제 사용한 코드를 올려주는게 도움이 됩니다.

동접 몇천이면 select 보다는 poll을 추천합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

park7275의 이미지

====> from "/usr/include/sys/select.h"

/* The fd_set member is required to be an array of longs. */
typedef long int __fd_mask;

/* Some versions of define these macros. */
#undef __NFDBITS
#undef __FDELT
#undef __FDMASK
/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */
#define __NFDBITS (8 * sizeof (__fd_mask))
#define __FDELT(d) ((d) / __NFDBITS)
#define __FDMASK(d) ((__fd_mask) 1 << ((d) % __NFDBITS))

/* fd_set for select and pselect. */
typedef struct
{
/* XPG4.2 requires this member name. Otherwise avoid the name
from the global namespace. */
#ifdef __USE_XOPEN
__fd_mask fds_bits[__FD_SETSIZE / __NFDBITS];
# define __FDS_BITS(set) ((set)->fds_bits)
#else
__fd_mask __fds_bits[__FD_SETSIZE / __NFDBITS];
# define __FDS_BITS(set) ((set)->__fds_bits)
#endif
} fd_set;

내부적으로 fd_set이 이렇게 되어있네요.
__FD_SETSIZE 가 결정 하는듯한데.
제가 본 시스템은 1024이고 하니.... fd_mask가 1024/64(8 * sizeof (__fd_mask== long)) --> 16개이고
fd_mask가 8 byte 니깐 16 * 8 -> 128byte

fd_set 내부적으로 bit 처리 하는것으로 알고 있으니..* 8 해주면.
1024가 되네요.

ulimit -a 해서 보면 open files 가 1024네요.

아마도 /proc/sys/kernel 밑에 매칭되는게 잘 안보이는데..쩝.

1024이상 쓰실려면 커널 컴파일을 하셔야 할려나??

죄송합니다........찾아본다고 했는데..더 이상..모르겠네요..ㅋㅋ

[KILL] 죽을각오로.........

[KILL] 죽을각오로.........