无法发出IGMP report报文
lxd2 2006-12-01 05:14:03 我在程序里面先建立一个socket, 绑定本地端口,然后通过setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)&mreq, sizeof(mreq))), 这样来发出一个igmp的report报文.
现在的问题是, 我做完这个setsockopt之后, 首先函数没有返回错误, 那应该说明我这个函数的执行过程中没有出错, 也就是产生了这个包,但是通过ethereal抓包并没有抓到igmp包。程序如下,希望高人指点(另外linux内核中已经打开muticasting选项)
int m_hSock;
m_hSock = socket(AF_INET, SOCK_DGRAM, 0);
if(m_hSock == -1){
printf("failed!\n");
printf("socket failed!\n");
return -1;
}
struct sockaddr_in local;
memset(&local, 0, sizeof(local));
local.sin_family = AF_INET;
local.sin_port = htons(1234);
local.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(m_hSock, (struct sockaddr*)&local,
sizeof(local)) == -1)
{
printf("failed!\n");
printf("bind failed!\n");
close(m_hSock);
m_hSock = -1;
}
struct ip_mreq mreq;
struct ifreq ifreq;
mreq.imr_multiaddr.s_addr= inet_addr("239.1.1.1");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sock, IPPROTO_IP,
IP_ADD_MEMBERSHIP,&mreq, sizeof(mreq));