none
SOCKET 编程 在 Vista 下 bind 返回 SOCKET_ERROR,WSAGetLastError 返回 10049 RRS feed

  • 问题

  •  

    同样的代码,在 XP 下,无任何错误,但是在 Vista 下,就是错误,最后确定是在bind时发生的错误,错误代码10049,

    代码:

     

    SOCKADDR_IN SckAddr;
    SckAddr.sin_family = AF_INET;
    SckAddr.sin_port = ::htons(uSocketPort);
    SckAddr.sin_addr.S_un.S_addr = ::inet_addr(lpSocketAddressA);
    delete[] lpSocketAddressA;
    if(::WSAAsyncSelect(m_hSocket, m_hMsgWnd, WM_TS_SOCKET_BASE, lEvent) > 0)
    {
     Close();
     return FALSE;
    }
    if(::bind(m_hSocket, (const LPSOCKADDR)&SckAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
    {
     Close();
     return FALSE;
    }
    return TRUE;

     

     

    bind()函数返回值为SOCKET_ERROR

    此时WSAGetLastError()值为10049

    但是在XP下是一切正常,恳请各位提供一个可行的解决方案。
    • 已移动 小鱼儿 2009年5月19日 9:52 ([Loc]From:Windows Vista 开发相关讨论)
    2008年11月11日 10:15

答案

全部回复

  • 同样的代码,在 XP 下,无任何错误,但是在 Vista 下,就是错误,最后确定是在bind时发生的错误,错误代码10049,

    代码:

     

    SOCKADDR_IN SckAddr;
    SckAddr.sin_family = AF_INET;
    SckAddr.sin_port = ::htons(uSocketPort);
    SckAddr.sin_addr.S_un.S_addr = ::inet_addr(lpSocketAddressA);
    delete[] lpSocketAddressA;
    if(::WSAAsyncSelect(m_hSocket, m_hMsgWnd, WM_TS_SOCKET_BASE, lEvent) > 0)
    {
     Close();
     return FALSE;
    }
    if(::bind(m_hSocket, (const LPSOCKADDR)&SckAddr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
    {
     Close();
     return FALSE;
    }
    return TRUE;

     

     

    bind()函数返回值为SOCKET_ERROR

    此时WSAGetLastError()值为10049

    但是在XP下是一切正常,恳请各位提供一个可行的解决方案。
    2008年11月11日 10:12
  • An invalid IP address was provided in the Bind() command
    Turn off your firewall and retry
    2008年11月11日 19:11
  •  

    好像不是这个原因,肯定不是防火墙的原因,地址我用的127.0.0.1,应该没问题。
    2008年11月12日 9:41