TCP 소켓으로 한 5M정도를 1024씩 잘라서 보내려고 합니다. 1024크기 패킷의 처음한 바이트는 패킷타입으로 사용하여 이 값을 보고 패킷을 처리합니다.
그런데 아무런 delay없이 보낼 경우, 처음에 10개정도는 패킷타입이 제대로 된 값이 들어가는데, 그 이후 부터 패킷타입값이 다른 값이 들어갑니다.
그래서 delay를 주고 보내면 제대로된 패킷값이 제대로 들어가서 받는 측에서는 제대로 받고 처리합니다.
select를 이용하여 소켓에서 데이터를 받았을 경우 처리합니다.
ulimit -a를 하면 나오는 사항 중에서 open files의 수를 고치려 합니다.
kldp문서를 하나 찾아서 거기에 나온데로 /usr/include/linux/fs.h의 NR_OPEN과 NR_FILE을 고치고 /usr/include/linux/limits.h의 NR_OPEN과 OPEN_MAX를 고치고 커널 컴파일을 다시 하였는데 여전히 ulimit -a를 해보면 똑같이 나오는 군요.
sysctl -a를 했을때
fs.file-max = 65536
fs.file-nr = 600 0 65536
이렇게 나오기는 하나
ulimit -a을 하면 open files는 기본값이 1024가 나옵니다.
그리고 간단한 소켓 서버를 짜서 테스트 해본 결과 1024개 이상 fd를 열지 못하는 군요..
new_node->item.time = data.time;
new_node->item.index = data.index;
new_node->item.string = (char *)(new_node + sizeof(list_t)); // 이 부분이 뭘하는건지요? 단지 문자열이 들어 갈만큼의 메모리 초기화 인지요?