accept(dlg->clisock,(sockaddr*)&(dlg->serv),&(dlg->addlen));
/////这一步出错,该从哪些方面解决???
用GetLastError所得:错误代码10038

解决方案 »

  1.   

    socket创建时错误
    建议创建,绑定,每一步加入异常处理
      

  2.   

    WSADATA wsaData;
    struct sockaddr_in dest;
    struct hostent* hp;
    DWORD dwVaule = 1;
    unsigned char LocalName[256] ={""};
    int ret;

    WSAStartup(MAKEWORD(2, 1), &wsaData);
    TestMode = nMode;
    if(nMode == 0)
    {
    m_Socket = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
    }
    else
    {
    m_Socket = socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
    }
    if(m_Socket == INVALID_SOCKET)
    {
    GetSnifferException("WSASocket() failed!");
    closesocket(m_Socket);
    return -1;
    }
    //设置是否亲自处理报头
    //setsockopt(m_Socket,IPPROTO_TCP,IP_HDRINCL,&optval,sizeof(optval));
    //得到本机计算机名和ip地址
    gethostname((char*)LocalName,sizeof(LocalName) - 1);
    hp = gethostbyname((char*)LocalName);
    if(!hp)
    {
    GetSnifferException("get localHost failed!");
    closesocket(m_Socket);
    return -1;
    }
    //清空结构的数据
    memset(&dest,0,sizeof(dest));
    if(nMode == 0)
    {
    dest.sin_addr.s_addr = inet_addr(IpAddress);
    }
    else
    {
    dest.sin_addr = *(in_addr*)hp->h_addr_list[0];
    }
    dest.sin_family = AF_INET;
    dest.sin_port = htons(5000);
    //绑定socket在一个端口
    if(nMode != 0)
    {
    ret = bind(m_Socket,(PSOCKADDR)&dest,sizeof(dest));
    }
    if(ret == SOCKET_ERROR)
    {
    GetSnifferException("bind() failed!");
    closesocket(m_Socket);
    return -1;
    }
    if(nMode != 0)
    {
    //设置网卡工作模式为混合工作模式
    ret = ioctlsocket(m_Socket,SIO_RCVALL,&dwVaule);
    if(ret == SOCKET_ERROR)
    {
    GetSnifferException("ioctlsocket() failed!");
    closesocket(m_Socket);
    return -1;
    }
    }