На Linux я хочу получить многоадресный трафик только от определенного интерфейса. Таким образом, я привязываю интерфейс и порт с сокетом , затем присоединяюсь к параметре многоадресной группы по SetSockopt с помощью ip_add_membership . Вот код: < /p>
Я не могу получить многоадресный трафик группы 239.1.0.1, исходящий от 192.168.1.11. Если я привязываю INADDR_ANY вместо 192.168.1.11, он работает так, как ожидалось.
Из этого ответа кажется, что я могу привязать только INADDR_ANY и фильтруйте многоадресный трафик с помощью setockopt с опцией IP_ADD_MEMBERSHIP. Это правильно?
Спасибо.
На Linux я хочу получить многоадресный трафик только от определенного интерфейса. Таким образом, я привязываю интерфейс и порт с сокетом , затем присоединяюсь к параметре многоадресной группы по SetSockopt с помощью ip_add_membership . Вот код: < /p> [code]#include #include #include #include #include #include
#define PORT 60000 #define MULTICAST_IP "239.1.0.1" #define BUFFER_SIZE 1024
int main(int argc, char const *argv[]) { int sockfd; struct sockaddr_in servaddr, cliaddr; struct ip_mreq mreq; char buffer[BUFFER_SIZE];
socklen_t len = sizeof(cliaddr); char addr[17] = {0}; int n = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE, MSG_WAITALL, (struct sockaddr *)&cliaddr, &len); buffer[n] = '\0'; inet_ntop(AF_INET, &cliaddr.sin_addr, addr, static_cast(sizeof(addr))); printf("Multicast message from %s received: %s\n", addr, buffer);
close(sockfd); return 0; }
[/code] Я не могу получить многоадресный трафик группы 239.1.0.1, исходящий от 192.168.1.11. Если я привязываю INADDR_ANY вместо 192.168.1.11, он работает так, как ожидалось. Из этого ответа кажется, что я могу привязать только INADDR_ANY и фильтруйте многоадресный трафик с помощью setockopt с опцией IP_ADD_MEMBERSHIP. Это правильно? Спасибо.