|
제가 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개의 클라이언트가 메시지를 주고받으면서
네트웍 부하가 걸려서 생기는 현상인것 같은데 맞는지요
그렇다면 대처법은 어떻게 되나요???
궁금합니다
고수님들 답변 꼭좀 부탁드립니다
|