组播时若绑定到指定的IP地址后则无法收到组播消息
我遇到以下的问题,希望能得到大家的指点,谢谢。
对于多网卡(多IP地址)组播时如果采用默认地址(htonl(INADDR_ANY))可以收到通过第一块网卡转发的多播消息,如果将其绑定到第二块网卡指定的IP地址后则就无法收到组播消息,不知是什么原因。
sockaddr_in addr;
sUdpMCastSock=socket(AF_INET,SOCK_DGRAM,0); //UDP socket
addr.sin_family=AF_INET;
addr.sin_port=htons(Multiport); //Local UDP socket port
//增加绑定指定IP地址
/*
if( 0 == inet_aton(LocalIP,&addr.sin_addr) )
{
shutdown(sUdpMCastSock,SD_BOTH );
CloseSocket(sUdpMCastSock);
sUdpMMCastSock=-10;
return 16;
}
//*/
//默认地址
addr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sUdpMCastSock,(struct sockaddr*)&addr,sizeof(sockaddr))== -1 )
{
shutdown(sUdpMCastSock,SD_BOTH );
CloseSocket(sUdpMCastSock);
sUdpMCastSock=-10;
return 2;
}
//加入多播组
inet_aton(MULTICASTIPADDR,&MultiCast_Group.imr_multiaddr);
//增加绑定指定IP地址
//*
if( 0 == inet_aton(LocalIP,&MultiCast_Group.imr_interface) )
{
shutdown(sUdpMCastSock,SD_BOTH );
CloseSocket(sUdpMCastSock);
sUdpMCastSock=-10;
return 26;
}
//*/
//默认地址
MultiCast_Group.imr_interface.s_addr=htonl(INADDR_ANY);
if( setsockopt(sUdpMCastSock,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char *)&MultiCast_Group,sizeof(MultiCast_Group)) == -1 )
{
shutdown(sUdpMCastSock,SD_BOTH );
CloseSocket(sUdpMCastSock);
sUdpMCastSock=-10;
return 3;
}