Отправка трансляции в Linux через сокеты - PullRequest
3 голосов
/ 21 июля 2011

решено пожалуйста, закройте вопрос (но я действительно не знаю, как: / плохой день)

Я пытаюсь отправить трансляцию в Linux через сокеты, это всегда проходило через обаинтерфейсы (у меня есть активные eth0 и eth1, оба в разных сегментах), но suddelny, он выходит только через первый, eth0

Вот код:

void sendBroad(char *dstIP, char *localIP)
{
    int sock;                         /* Socket */
    struct sockaddr_in broadcastAddr; /* Broadcast address */
    int broadcastPermission;          /* Socket opt to set permission to broadcast */
    unsigned int localIPLen;       /* Length of string to broadcast */


    /* Create socket for sending/receiving datagrams */
    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
        perror("socket() failed");

    /* Set socket to allow broadcast */
    broadcastPermission = 1;
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission, 
          sizeof(broadcastPermission)) < 0)
        perror("setsockopt() failed");

    /* Construct local address structure */
    memset(&broadcastAddr, 0, sizeof(broadcastAddr));   /* Zero out structure */
    broadcastAddr.sin_family = AF_INET;                 /* Internet address family */
    broadcastAddr.sin_addr.s_addr = inet_addr(dstIP);   /* Broadcast IP address */
    broadcastAddr.sin_port = htons(BroadcastPort);      /* Broadcast port */

    localIPLen = strlen(localIP);  /* Find length of localIP */
    int j;
    for (j=0; j<1; j++) //doesnt mean anything so far, not important
    {
         /* Broadcast localIP in datagram to clients */
         if (sendto(sock, localIP, localIPLen, 0, (struct sockaddr *) 
               &broadcastAddr, sizeof(broadcastAddr)) != localIPLen)
             perror("sendto() sent a different number of bytes than expected");


    }
}

Любая помощь в этом вопросе?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 22 июля 2011

Просто пришлось сделать исправление широковещательных портов, это было смешано.Сам код в порядке

1 голос
/ 22 июля 2011

Ваш код выглядит нормально с первого взгляда. Возможно, проблема в IP-адресе назначения.

NB вы понимаете, что дейтаграмма приходит вместе с адресом источника в любом случае? Вам также не нужно помещать адрес в полезную нагрузку. Вы можете добавить что-то более конкретное, например, идентификатор приложения.

...