2013-07-12 2 views
0

다음 코드는 내 서브넷에서 UDP 멀티 캐스트 만받습니다. 모든 서브넷에서 UDP 멀티 캐스트를 수신 할 수있는 방법은 무엇입니까?모든 서브넷에서 UDP 멀티 캐스트를 수신 할 수있는 방법은 무엇입니까?

sd = socket(AF_INET, SOCK_DGRAM, 0); 
    int reuse = 1; 
    setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, 
      (char *) &reuse, sizeof(reuse)); 

    memset((char *) &localSock, 0, sizeof(localSock)); 
    localSock.sin_family = AF_INET; 
    localSock.sin_port = htons(1900); 
    localSock.sin_addr.s_addr = INADDR_BROADCAST; 

    bind(sd, (struct sockaddr*) &localSock, sizeof(localSock)); 

    group.imr_multiaddr.s_addr = inet_addr("239.255.255.250"); 
    group.imr_interface.s_addr = inet_addr("192.168.3.2"); 

    setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
      (char *) &group, sizeof(group)); 


    /* Read from the socket. */ 

답변

0

192.168.3.2가 아닌 모든 인터페이스를 통해 그룹에 가입해야합니다.

또한 소켓을 INADDR_BROADCAST가 아닌 INADDR_ANY에 바인딩해야합니다.

+0

하나의 인터페이스 eth0 (및 lo) 만 있습니다. – AndreyKeen

+0

그런 경우 라우터 구성을 봐야합니다. 멀티 캐스트를 통과 시키도록 구성되지 않았습니다. – EJP

+0

하지만 내 컴퓨터의 tcpdump (192.168.3.2)는 네트워크 192.168.1.0/24에서 멀티 캐스트를 포착했습니다. – AndreyKeen