使用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: "<

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

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

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

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


你可能感兴趣的:(C++,UDP/TCP)