首先说下,我的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下是没问题的,请问哪位知道怎么弄?我的目的要实现多址广播。
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下行的,呵呵
上面用到的结构体没定义下面给出:
struct ip_mreq
{
struct in_addr imn_multiaddr; /*加入或者退出的广播组IP地址*/
struct in_addr imr_interface; /*加入或者退出的网络接口IP地址*/
};
我自己用setsockopt函数解决了,呵呵,不过这个在WINDOWS上,直接给参数5不对,函数setsockopt会失败。结贴了。