WSADATA wsd;
WSAStartup (MAKEWORD (2, 2), &wsd);sockaddr_in addr;
memset(&addr, 0, sizeof(sockaddr_in));
    
sSocket = socket(AF_INET, SOCK_STREAM, 0);    sockaddr_in addr;
    // Address family Internet
    addr.sin_family = AF_INET;
    // Assign port 'port' to this socket
    addr.sin_port = htons (uiPort);
    if (lpszIp == NULL)
    {
        // No destination
        addr.sin_addr.s_addr = htonl (INADDR_ANY);
    }
    else
    {
        addr.sin_addr.s_addr = inet_addr(lpszIp);
    }
    
    // 绑定IP及端口
    if (bind (sSocket, (LPSOCKADDR) &addr, sizeof (addr)) == SOCKET_ERROR)
    {
        // 关闭套接字
        Close(sSocket);
        
        return SOCKET_ERROR;
    }
以上代码是在创建Socket侦听时,绑定IP地址,以上代码在一个叫NDK的动态库中。
目前有另一个DLL,需要调用NDK库建立侦听。但一到绑定时,就返回10057错误,不知道为什么?如果是直接用MFC对话框程序调用NDK库,就成功。

解决方案 »

  1.   

    指什么初始化?
    NDK.dll是静态加载。执行到bind时,返回值为-1,获取WSAGetLastError的错误码为:0
      

  2.   

    10057:
    由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。看一下addr
      

  3.   


    现在的情况是:
    执行到bind时,返回值为-1,获取WSAGetLastError的错误码为:0
      

  4.   

    第一,没看见在哪调用了WSAGetLastError
    第二,bind不应该出现这个错误,10057是怎么来的?用写日志的方式输出错误
      

  5.   

    10057是怎么得到的?这样改一下,看看返回值是多少。sSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (sSocket == INVALID_SOCKET)
    {
        return WSAGetLastError();
    }
    // ...
    if (bind(sSocket, (LPSOCKADDR)&addr, sizeof(addr)) != 0)
    {
        int errCode = WSAGetLastError();
        closesocket(sSocket);
        return errCode;
    }
    // ...
    return 0;
      

  6.   

    bind失败不应该返回10057错误吧,你确定是bind失败吗?
      

  7.   

    第一,没看见在哪调用了WSAGetLastError 
    第二,bind不应该出现这个错误,10057是怎么来的
      

  8.   

    10057: 
    由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。 看一下addr