使用UDP多播是setsockopt時失敗返回-1,錯誤程式碼10042的解決辦法
阿新 • • 發佈:2019-01-01
昨天在寫一個接收多播訊息的程式時發現了一個錯誤
// 欲加入組播組地址資訊 //組播地址 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")