차돌배기 님이 쓰신 글 :
: 제가 IOCP 서버 모델을 개발중인데
:
: 성능 테스트를 어떻게 해야 하나요???
:
: 제가 지금 테스트 환경이 좋지 않아서 서버는 듀얼코어 노트북이고 클라이언트는 싱글코어 노트북입니다
:
: 테스트를 위해서 타이머를 0.05 InterVal을 갖고 연결된 클라이언트 에서는 메시지를 받자마자 서버에 리스판스를 보냅니다
:
: 그리고 클라이언트 노트북에서는 클라이언트를 15개정도 띄었습니다
:
:
:
: [문제1]
:
: 가끔 WSASend 시에 10055 에러가 납니다 즉 시스템 버퍼 오버가 나는것 같은데
:
: [질문1]
:
: 너무 짧은 시간에 데이터를 보낼려고 해서 그런가요?
:
: [질문2]
:
: 10055 에러시 PostQueuedCompletionStatus 로 다시 WSASend하게끔 IOCP QUEUE 에 등록합니다
:
: 이렇게 처리해도 되는건지요?
:
: 원래는 Sleep(); 을 준후에 PostQueuedCompletionStatus 메시지를 보냈는데 타이머는 계속 0.05초마다
:
: 보내게 되므로 더욱 트래픽이 심각해지는것 같은데요
:
:
:
: [문제2]
:
: 서버를 오래 돌리다 보면 10038 에러가 납니다
:
:
:
: [질문3]
:
: 왜 이런 에러가 나며 대처법은 무엇인지요?
:
:
:
: [문제3]
:
: INT32 nRetVal = WSASend(pClientInfo->m_Socket,
:
: pOverlapBuff->GetWSASendBuffer(),
:
: 1,
:
: &dwSendNumBytes,
:
: ulFlags,
:
: &pOverlapBuff->m_overLapp,
:
: NULL);
:
: if ( nRetVal == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING )
:
: {
:
: INT32 nError = WSAGetLastError();
:
: ShowMsgBox("CIOCPSWin::OnWrite : nRetVal == SOCKET_ERROR","SOCKET_ERROR");
:
:
:
: if(nError == 10055)
:
: {
:
: // Sleep(SOCKERROR_10055_DELAY);
:
: ;
:
: }
:
: else
:
: {
:
: CloseClient(pClientInfo,nError);
:
: return ERROR_SOCKET;
:
: }
:
: }
:
:
:
: 위 소스에서 nRetVal = -1 이고 nError = 6 입니다
:
:
:
: [질문4]
:
: 이런 현상이 일어나는 이유는 무엇입니까
:
: 제가 생각하기에는 클라이언트 노트북에서 15개의 클라이언트가 메시지를 주고받으면서
:
: 네트웍 부하가 걸려서 생기는 현상인것 같은데 맞는지요
:
: 그렇다면 대처법은 어떻게 되나요???
:
: 궁금합니다
:
:
:
: 고수님들 답변 꼭좀 부탁드립니다
http://tong.nate.com/shkworld21/39904029