Многоадресная передача на петлевом устройстве

Я хочу отправлять многоадресные пакеты UDP на адрес обратной связи и получать то же самое в другом приложении. Все тесты сделаны на Fedora Core 17 Linux.

Идея состоит в том, чтобы получать видеопоток через RTSP / HTTP или любой другой сетевой протокол и многоадресно передавать его по адресу обратной связи, чтобы я мог использовать VLC для воспроизведения потока с использованием многоадресного адреса. Оставляя в стороне другие битрейты и контролируемые проблемы многоадресной рассылки, я попытался прочитать один видеофайл и многоадресную рассылку на устройстве обратной связи. Но когда пытался играть то же самое на VLC, это нет работал. Я'Я могу видеть, как пакет передается в Wireshark, но IP-адрес src взят из моего сетевого интерфейса по умолчанию (т.е. интерфейс, который является моим шлюзом по умолчанию)

Я уже попробовал следующие команды

sudo ifconfig lo multicast
sudo ip route add 239.252.10.10 dev lo

Любое предложение в этом отношении было бы очень полезно.

Код тестовой программы, вставленный ниже

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 


    #define MULTICAST_ADDRESS "239.252.10.10"
    #define UDP_PORT 1234
    #define INTERFACE_IP    "127.0.0.1"
    #define MTU 1474
    #define DATA_BUFFER_SIZE  (1024*1024)

    static int  socket_init(char *intf_ip) {
    int sd;
    struct in_addr localInterface;

      sd = socket (AF_INET, SOCK_DGRAM, 0);
      if (sd < 0) {
          perror ("Opening datagram socket error");
          return -1;
      }
      else
        printf ("Opening the datagram socket...OK.\n");

      localInterface.s_addr = inet_addr (intf_ip);

      if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (char *) &localInterface,sizeof (localInterface)) < 0){
          perror ("Setting local interface error");
          close(sd);
          return -1;
      }
      else
        printf ("Setting the local interface...OK\n");
    #if 1
        char loopch = 1;

        if(setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&loopch, sizeof(loopch)) < 0){
        perror("Setting IP_MULTICAST_LOOP error");
        close(sd);
        return -1;
        }
        else
        printf("Enabling the loopback...OK.\n");
    #endif
      return sd;

    }


    static int transmit_packet(int sd, char *databuf, int size,char *ip, unsigned short port){

    struct sockaddr_in groupSock;
    int len,datalen,rc;

      memset ((char *) &groupSock, 0, sizeof (groupSock));

      groupSock.sin_family = AF_INET;

      groupSock.sin_addr.s_addr = inet_addr (ip);

      groupSock.sin_port = htons (port);

      len=0;
      datalen = MTU;
      if(size < MTU)
        datalen = size;

      while(len < size){
        rc = sendto(sd, databuf, datalen, 0, (struct sockaddr *) &groupSock,sizeof (groupSock));
        if(rc 

Ответы на вопрос(2)

Ваш ответ на вопрос