如题!

解决方案 »

  1.   

    这个应该很难区别把
    你可以通过判断socket函数操作的返回值或者判断指定socket是否有效试试.
      

  2.   

    //m_hSocket 是SOCKET 你所要判断的
    BOOL HasConnectionDropped(void)
    {
    BOOL bConnDropped = FALSE;
    INT iRet = 0;
    BOOL bOK = TRUE;

    if (m_hSocket == INVALID_SOCKET)
    return TRUE; struct timeval timeout = { 0, 0 };
    fd_set readSocketSet;

    FD_ZERO(&readSocketSet);
    FD_SET(m_hSocket, &readSocketSet);

    iRet = ::select(0, &readSocketSet, NULL, NULL, &timeout);
    bOK = (iRet > 0);

    if(bOK)
    {
    bOK = FD_ISSET(m_hSocket, &readSocketSet);
    }

    if(bOK)
    {
    CHAR szBuffer[1] = "";
    iRet = ::recv(m_hSocket, szBuffer, 1, MSG_PEEK);
    bOK = (iRet > 0);
    if(!bOK)
    {
    INT iError = ::WSAGetLastError();
    bConnDropped = (( iError == WSAENETRESET) ||
    (iError == WSAECONNABORTED) ||
    (iError == WSAECONNRESET) ||
    (iError == WSAEINVAL) ||
    (iRet == 0));
    }
    }
        return(bConnDropped);
    }