Linux Raw Socket: IP_ADD_MEMBERSHIP `Работа с сокетом без сокета` - PullRequest
0 голосов
/ 27 февраля 2020

Я хочу читать необработанные rnet пакеты из сокета. Эти пакеты приходят из многоадресного потока, к которому я должен присоединиться через IP_ADD_MEMBERSHIP. К сожалению, RAW-сокеты, по-видимому, не поддерживают присоединение к Multicast-адресам?

struct ip_mreqn mreq;
memset(&mreq, 0, sizeof(struct ip_mreqn));

if(inet_pton(AF_INET, multicast_ip, &mreq.imr_multiaddr.s_addr)) {
    /* Local interface address */
    memcpy(&mreq.imr_address, &cfg->ifaddr.sin_addr, sizeof(struct in_addr));
    mreq.imr_ifindex = cfg->ifindex;

    if(setsockopt(cfg->socket_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(struct ip_mreqn)) < 0) {
        fprintf(stderr, "Failed to set `IP_ADD_MEMBERSHIP`: %s\n", strerror(errno));
        return;
    }
}

Не удалось установить IP_ADD_MEMBERSHIP: операция с сокетом на не-сокете

cfg->socket_fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

Как получить полный пакет rnet, но при этом присоединиться к многоадресным IP-адресам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...