我检查另一台机子连不连的上。测试时我使用139端口。在局域网内显示的结果和使用ping一样,但是我如果把我机子的网线拔掉,随便测试哪个IP都说连接成功,这是为什么BOOL CWLNet::CheckNetConnect(sockaddr_in destaddr, int interval)
{
m_socket = socket( AF_INET, SOCK_STREAM, 0 );
if ( m_socket == INVALID_SOCKET ) 
{
return FALSE;
} m_WsaEvent = WSACreateEvent();
if ( m_WsaEvent == WSA_INVALID_EVENT ) 
{
closesocket( m_socket );
return FALSE;
} if ( WSAEventSelect( m_socket, m_WsaEvent, FD_CONNECT) ) 
{
WSACloseEvent( m_WsaEvent );
closesocket( m_socket );
return FALSE;
} int j =  connect( m_socket, (const struct sockaddr *)&destaddr, sizeof( sockaddr_in ) );
DWORD ret = WSAWaitForMultipleEvents(1, &m_WsaEvent, TRUE, interval, FALSE);
WSACloseEvent( m_WsaEvent );
closesocket( m_socket );

if ( ret == WSA_WAIT_EVENT_0 ) 
{
return TRUE;
}
else
{
return FALSE;
}
}

解决方案 »

  1.   

    检查int j =  connect( m_socket, (const struct sockaddr *)&destaddr, sizeof( sockaddr_in ) );的返回值,或用GetLastError()看一下,如果都是0才说明没问题(网线被拔掉connect并不阻塞!!)
      

  2.   

    可是你把socket和event绑定之后,connect本来就应该返回SOCKET_ERROR
      

  3.   

    我估计不是,你把socket和event绑定之后,只是在connect成功后会
    返回消息,但连接动作和以前没什么区别。
      

  4.   

    连接失败,判断错误
    直接判断connect返回值
      

  5.   

    msdn上写的,把socket和event绑定之后,connect只会返回SOCKET_ERROR
    没人知道为什么吗