WINCE5.0 多址广播WSASocket创建失败?

yangruizi   2010-3-17 11:25 楼主
首先说下,我的WINCE系统是支持WinSock2的,可以用WinSock2库的函数,在我的程序中想要创建多址广播套接字
创建函数:SOCKET WSASocket(
  int af,
  int type,
  int protocol,
  LPWSAPROTOCOL_INFO lpProtocolInfo,
  GROUP g,
  DWORD dwFlags
);
// 创建一个多址广播套接字
m_hSock = WSASocket(AF_INET, SOCK_DGRAM,  IPPROTO_UDP,
                (LPWSAPROTOCOL_INFO)NULL, 0, WSA_FLAG_OVERLAPPED
                | WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF);
返回错误,前面的代码Socket已经初始化了。错误码是10022,就是WSAEINVAL ,无效的参数,可能是函数dwFlags无效了,这个在WINDOWS下是没问题的,请问哪位知道怎么弄?我的目的要实现多址广播。

回复评论 (3)

        struct ip_mreq mreq;        
        mreq.imn_multiaddr.S_un.S_addr = inet_addr(m_szBrdAddr);
    mreq.imr_interface.S_un.S_addr = inet_addr(m_szLocalAddr);

        int iR = setsockopt(m_hSock,IPPROTO_IP,5/*IP_ADD_MEMBERSHIP*/,(const char*)&mreq,sizeof(mreq));  
        if ( iR  <  0 )
        {
                AfxMessageBox(L"setsockopt error!!!!1");
        }

这个在WINCE下行的,呵呵
点赞  2010-3-17 17:20
上面用到的结构体没定义下面给出:
struct ip_mreq            
{  
      struct in_addr imn_multiaddr;         /*加入或者退出的广播组IP地址*/   
      struct in_addr imr_interface;         /*加入或者退出的网络接口IP地址*/   
};
点赞  2010-3-17 17:21
我自己用setsockopt函数解决了,呵呵,不过这个在WINDOWS上,直接给参数5不对,函数setsockopt会失败。结贴了。
点赞  2010-3-17 18:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复
      缈昏瘧锛