使用UDP多播是setsockopt时失败返回-1,错误代码10042的解决办法

昨天在写一个接收多播消息的程序时发现了一个错误


	// 欲加入组播组地址信息
	//组播地址
	mreq.imr_multiaddr.s_addr = inet_addr (strIPAddress.c_str());
	//透明所有协议
	mreq.imr_interface.s_addr = INADDR_ANY;

	bool bReuse = true;
	setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, (char *)&bReuse, sizeof(bool));
	//设置套接字选项,加入一个多播组
	if (setsockopt (m_socket, 
		IPPROTO_IP, 
		IP_ADD_MEMBERSHIP, 
		(char FAR *)&mreq, 
		sizeof (mreq)) == SOCKET_ERROR)
	{
		//报错
		cout<<"setsockopt failed! Error: "<<WSAGetLastError()<<endl;
		closesocket (m_socket);
		return FALSE;
	}

当执行到第二个setsockopt的时候总是会出现10042的错误,而另外一个程序同样的代码并不会出现这样的错误。

经检查,当使用ws2_32.lib库时执行该setsockopt会出现该错误,而使用wsock32.lib时不会出现该错误。

将文件头加入下面语句,或者在项目属性-》链接器-》输入-》附加依赖项中加入wsock32.lib再编译执行即可。

#pragma comment(lib,"wsock32.lib")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值