1. 程式人生 > >使用UDP多播是setsockopt時失敗返回-1,錯誤程式碼10042的解決辦法

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