请问在设置了一个连接socket为非阻塞,然后使用它去连接一个服务器,这时
connect的返回值不是WSAEWOULDBLOCK,但是也不是其他的msdn中列出的错误值,
这时该怎么处理,我跟踪的是WSAGetLastError()=183
这样可以按照WSAEWOULDBLOCK来处理吗?
connect的返回错误码是不是只有msdn中列出的错误值
歇歇 unsigned long ul = 3;//设置连接时间
int setIOct = ioctlsocket(SockConRemote,FIONBIO, (unsigned long*)&ul);
if(setIOct == SOCKET_ERROR)
{
             return  1;  
} int ret = connect(SockConRemote, (struct sockaddr*) &to, sizeof(to));
if(ret == SOCKET_ERROR)
{
          }

解决方案 »

  1.   

    在正常的情况下connect 如果连接成功,返回0,否则返回非0值,你只用一个SOCKET_ERR是肯定判断不出结果来的!可以这样:
    int ret = connect(SockConRemote, (struct sockaddr*) &to, sizeof(to));
    if(ret == 0)
    {
      printf("Congratulations,sir: Connect SUCCESS");
    }
    else
    {
      printf("Sorry,sir: Connect FAILURE! Error code=%d, MSDN error symbol:", ret);
      switch(ret)
      {
        case WSANOTINITIALISED: printf("WSANOTINITIALISED"); break;
        case WSAENETDOWN :printf("WSAENETDOWN ");break;
        ...
    // 下面这些标号的捕捉错误类别和上面的类似,自己处理。
    /*
    WSAEADDRINUSE 
    WSAEINTR 
    WSAEINPROGRESS 
    WSAEALREADY 
    WSAEADDRNOTAVAIL 
    WSAEAFNOSUPPORT 
    WSAECONNREFUSED
    WSAEFAULT
    WSAEINVAL 
    WSAEISCONN 
    WSAENETUNREACH 
    WSAENOBUFS 
    WSAENOTSOCK 
    WSAETIMEDOUT 
    WSAEWOULDBLOCK 
    WSAEACCES 
    */  }
    }
      

  2.   

    老大
     case WSANOTINITIALISED: printf("WSANOTINITIALISED"); break;
        case WSAENETDOWN :printf("WSAENETDOWN ");break;
        ...
    // 下面这些标号的捕捉错误类别和上面的类似,自己处理。
    /*
    WSAEADDRINUSE 
    WSAEINTR 
    WSAEINPROGRESS 
    WSAEALREADY 
    WSAEADDRNOTAVAIL 
    WSAEAFNOSUPPORT 
    WSAECONNREFUSED
    WSAEFAULT
    WSAEINVAL 
    WSAEISCONN 
    WSAENETUNREACH 
    WSAENOBUFS 
    WSAENOTSOCK 
    WSAETIMEDOUT 
    WSAEWOULDBLOCK 
    WSAEACCES 这些标志没有一个是183的
    所有的错误我都作了处理,就是183的不知道是什么错误
      

  3.   

    是哦,高手来啊,我也曾经碰到这样的问题,WSAGETLASTERROR()返回2,不知道是怎搞的
      

  4.   

    高手高手高手高高手
    kuai lai a