昨天在写一个接收多播消息的程序时发现了一个错误
// 欲加入组播组地址信息
//组播地址
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")