用API 的connnect方法
”connect(s,(struct sockaddr*)&ssAddr,sizeof(ssAddr))“时报错,错误代码10038,
请教大虾该怎么处理?
另: INVALID_SOCKET 定义为(SOCKET)(~0) , 是指非0的整数为INVALID_SOCKET吗?
我的代码如下:
int testConnect()
{
WORD wVersionRequested= MAKEWORD( 2, 2 );
WSADATA wsaData;
int err = WSAStartup( wVersionRequested, &wsaData );    
if ( err != 0 ) {
        printf("error!WSAStartup failed!\n");
        return -1;
} SOCKET s;
if(s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP) == SOCKET_ERROR)
{
printf("socket() err: %d\n",WSAGetLastError());
}
if(s == INVALID_SOCKET)
{
printf(" invalid socket ");
}
SOCKADDR_IN ssAddr;
ssAddr.sin_addr.S_un.S_addr = inet_addr("10.89.54.21");//本机IP
ssAddr.sin_family = AF_INET;
ssAddr.sin_port = htons(6666);
if(connect(s,(struct sockaddr*)&ssAddr,sizeof(ssAddr)) == SOCKET_ERROR)
{
printf("connect err:%d\n",WSAGetLastError());
}
return 0;
}

解决方案 »

  1.   

    另: INVALID_SOCKET 定义为(SOCKET)(~0) , 是指非0的整数为INVALID_SOCKET吗?
    ==指0取反。0xFFFFFFFF
      

  2.   

    WSAENOTSOCK (10038) Socket operation on non-socket.
    操作试图不是在套接字上进行。它可能是套接字句柄参数没有引用到一个合法套接字,或者
    是调用select()函数时,一个fd_set中的成员不合法。
      

  3.   

    套接字是否有效,是否去掉了socket
      

  4.   

    跟踪去看 , socket()函数返回的句柄s = 0 , s 是什么值时才是合法的?
      

  5.   

    是的,句柄s = 0 ,是无效的,if(s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP) == SOCKET_ERROR) -> if((s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP)) == SOCKET_ERROR),
    s > 0 , 问题就OK了! Thx all !