NonBlocking에 대해서 질문 있습니다.
밑에 소스를 보시면여. 리눅스에서 Nonblock socket으로 하면 데이터가 없으면 -1을 리턴하고 -1은 NonBlocking 과 socket close를 감지하기 위해
errno != EWOULDBLOCK로 체크하는 걸로 알고 있습니다.
헌데 문제가 뭐냐 하면 윈도우즈는 잘 작동하는데 리눅스에서는 socket close
를 감지 못할때가 있는데여. 혹시 고수님들. 이것 말고 체크할께 더 있는지
갈켜주시면 감사하겠습니다. ^____^;
int CSockClient::Send(char* msg, int len)
{
int nResult = 0;
#ifdef WIN32 // Win32
nResult = send(m_nSock, msg, len, 0);
#else
nResult = send(m_nSock, msg, len, MSG_NOSIGNAL);
#endif
// (metalwolf 2003-08-14 17:20) NonBlocking
if (nResult <= 0)
{
#ifdef WIN32
if (WSAGetLastError() != WSAEWOULDBLOCK)
{
if(m_pClient != NULL)
((CClient*)m_pClient)->NetClose();
return -1;
}
#else
if (errno != EWOULDBLOCK)
{
if(m_pClient != NULL)
((CClient*)m_pClient)->NetClose();
return -1;
}
#endif
}
return nResult;
}
댓글 달기