은 내가 UDP 소켓을연결된 모든 네트워크에서 UDP 멀티 캐스트를 어떻게 보낼 수 있습니까?
192.168.0.2 - real network card (interface id: 10)
192.168.180.1 - vmware adapter 1 (interface id: 21)
192.168.139.1 - vmware adapter 2 (interface id: 22)
(내 윈도우 7에서) 세 개의 네트워크 인터페이스가 (AF_INET), 바인드 호출에 의한 요지에 바인딩되지된다.
239.255.255.250으로 데이터 그램을 보내려고합니다. Wireshark에서 볼 수 있듯이 192.168.139.0/24 네트워크를 통해 데이터 그램을 보내는 데는 192.168.139.1 소스 주소 만 사용됩니다.
는 내가하는 인터페이스는 데이터 그램을 전송해야 Winsock을 할 말해 setsockopt를 호출 할 필요가 있다고 생각 :
UINT adapterId = 10;
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, (char*)&adapterId, sizeof(adapterId));
하지만 난 여기 10049 (WSAEADDRNOTAVAIL) 오류가 발생했습니다.
실제 네트워크 또는 멀티 홈 호스트의 모든 네트워크에서 데이터 그램을 보낼 수있는 방법은 무엇입니까?
오래전에 내 코드 (setsockopt 호출없이)는 WinXP에서 잘 작동했지만 기억할 수없는 시스템 하나의 네트워크 어댑터 또는 여러 개가 있습니다.
문제가 어리 석습니다. 잘못된 문서를 읽었습니다. IP_MULTICAST_IF adapterId는 네트워크가 아닌 호스트 바이트 순서 여야합니다. 다른 문서에서는이 점에서 차이점을 발견하고 htonl을 추가했습니다. 그 후, IP_MULTICAST_IF 설정은 실패하지 않고 모든 데이터 그램은 모든 네트워크로 전송된다. –
사실 ip_mreqn.imr_address 필드에서 한 번의 호출로 NIC의 IP 주소를 지정하는'IP_ADD_MEMBERSHIP'을 할 수있다. – EJP