; } if (family =3D=3D PF_INET) { struct sockaddr_in sa4; struct ip_mreq mreq4; memset(&sa4, 0, sizeof(sa4)); sa4.sin_len =3D sizeof(sa4); sa4.sin_family =3D AF_INET; sa4.sin_port =3D htons(6790); sa4.sin_addr.s_addr =3D htonl(INADDR_ANY); if (bind(fd, (struct sockaddr *)&sa4, sizeof(sa4)) < 0) { print_errno("bind(AF_INET)"); close(fd); return 1; } printf("bind(AF_INET 0.0.0.0:6790) ok\n"); memset(&mreq4, 0, sizeof(mreq4)); if (inet_pton(AF_INET, group_str, &mreq4.imr_multiaddr) !=3D 1) die("inet_pton(AF_INET)"); mreq4.imr_interface.s_addr =3D htonl(INADDR_ANY); printf("attempting IP_ADD_MEMBERSHIP for %s\n", group_str); if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq4, sizeof(mreq4)) < 0) { print_errno("IP_ADD_MEMBERSHIP"); close(fd); return 1; } printf("IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully = on PF_INET\n"); } else { struct sockaddr_in6 sa6; struct ip_mreq mreq4; memset(&sa6, 0, sizeof(sa6)); sa6.sin6_len =3D sizeof(sa6); sa6.sin6_family =3D AF_INET6; sa6.sin6_port =3D htons(6790); sa6.sin6_addr =3D in6addr_any; if (bind(fd, (struct sockaddr *)&sa6, sizeof(sa6)) < 0) { print_errno("bind(AF_INET6)"); close(fd); return 1; } printf("bind(AF_INET6 :::6790) ok\n"); memset(&mreq4, 0, sizeof(mreq4)); if (inet_pton(AF_INET, group_str, &mreq4.imr_multiaddr) !=3D 1) die("inet_pton(AF_INET)"); mreq4.imr_interface.s_addr =3D htonl(INADDR_ANY); printf("attempting IP_ADD_MEMBERSHIP for %s\n", group_str); if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq4, sizeof(mreq4)) < 0) { print_errno("IP_ADD_MEMBERSHIP"); close(fd); return 1; } printf("IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully = on PF_INET6\n"); } close(fd); return 0; } $ cc -Wall -Wextra -o mcast_repro mcast_repro.c $ ./mcast_repro 4 mode: family=3DPF_INET socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok bind(AF_INET 0.0.0.0:6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully on PF_INET $ ./mcast_repro 6 0 mode: family=3DPF_INET6 v6only=3D0 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D0) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP failed: Invalid argument (errno=3D22) $ ./mcast_repro 6 1 mode: family=3DPF_INET6 v6only=3D1 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D1) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP failed: Invalid argument (errno=3D22) $ ./mcast_repro 6 0 mode: family=3DPF_INET6 v6only=3D0 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D0) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP failed: Invalid argument (errno=3D22) Same program on HP-UX 11.31: osipovmi@deblndw028v:~ $ ./mcast_repro 4 mode: family=3DPF_INET socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok bind(AF_INET 0.0.0.0:6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully on PF_INET osipovmi@deblndw028v:~ $ ./mcast_repro 6 mode: family=3DPF_INET6 v6only=3D1 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D1) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP failed: Operation not supported (errno=3D223) osipovmi@deblndw028v:~ $ ./mcast_repro 6 0 mode: family=3DPF_INET6 v6only=3D0 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D0) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP failed: Operation not supported (errno=3D223) osipovmi@deblndw028v:~ $ ./mcast_repro 6 1 mode: family=3DPF_INET6 v6only=3D1 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D1) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP failed: Operation not supported (errno=3D223) and RHEL 8.x: osipovmi@deblndw012x:~ $ ./mcast_repro 4 mode: family=3DPF_INET socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok bind(AF_INET 0.0.0.0:6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully on PF_INET osipovmi@deblndw012x:~ $ ./mcast_repro 6 mode: family=3DPF_INET6 v6only=3D1 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D1) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully on PF_INET6 osipovmi@deblndw012x:~ $ ./mcast_repro 6 0 mode: family=3DPF_INET6 v6only=3D0 socket() ok -> fd=3D3 setsockopt(SO_REUSEADDR) ok setsockopt(SO_REUSEPORT) ok setsockopt(SO_BROADCAST) ok setsockopt(IPV6_V6ONLY=3D0) ok bind(AF_INET6 :::6790) ok attempting IP_ADD_MEMBERSHIP for 228.5.6.7 IP_ADD_MEMBERSHIP ok -> joined IPv4 multicast successfully on PF_INET6 I am not an expert, let me know whether my approach is wrong and where to go from here. --=20 You are receiving this mail because: You are on the CC list for the bug.=