双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

无法发出IGMP report报文

lxd2 lxd2 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在程序里面先建立一个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));

...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
lxd2
Linux/Unix社区 23,224 成员 74,535 内容