1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-21 10:26:06 +03:00

emulation on host: lwIP always receive multicast packets, enable and fix multicast udp server (#7386)

This commit is contained in:
david gauchard 2020-06-16 23:03:22 +02:00 committed by GitHub
parent 64f1f7b727
commit 448486a4c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -77,7 +77,8 @@ bool mockUDPListen (int sock, uint32_t dstaddr, uint16_t port, uint32_t mcast)
// Filling server information // Filling server information
servaddr.sin_family = AF_INET; servaddr.sin_family = AF_INET;
(void) dstaddr; (void) dstaddr;
servaddr.sin_addr.s_addr = htonl(global_source_address); //servaddr.sin_addr.s_addr = htonl(global_source_address);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(mockport); servaddr.sin_port = htons(mockport);
// Bind the socket with the server address // Bind the socket with the server address
@ -89,6 +90,8 @@ bool mockUDPListen (int sock, uint32_t dstaddr, uint16_t port, uint32_t mcast)
else else
mockverbose("UDP server on port %d (sock=%d)\n", mockport, sock); mockverbose("UDP server on port %d (sock=%d)\n", mockport, sock);
if (!mcast)
mcast = inet_addr("224.0.0.1"); // all hosts group
if (mcast) if (mcast)
{ {
// https://web.cs.wpi.edu/~claypool/courses/4514-B99/samples/multicast.c // https://web.cs.wpi.edu/~claypool/courses/4514-B99/samples/multicast.c
@ -96,8 +99,10 @@ bool mockUDPListen (int sock, uint32_t dstaddr, uint16_t port, uint32_t mcast)
struct ip_mreq mreq; struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = mcast; mreq.imr_multiaddr.s_addr = mcast;
mreq.imr_interface.s_addr = htonl(global_source_address); //mreq.imr_interface.s_addr = htonl(global_source_address);
if (global_ipv4_netfmt) mreq.imr_interface.s_addr = htonl(INADDR_ANY);
if (host_interface)
{ {
#if __APPLE__ #if __APPLE__
int idx = if_nametoindex(host_interface); int idx = if_nametoindex(host_interface);
@ -115,6 +120,8 @@ bool mockUDPListen (int sock, uint32_t dstaddr, uint16_t port, uint32_t mcast)
fprintf(stderr, MOCK "can't join multicast group addr %08x\n", (int)mcast); fprintf(stderr, MOCK "can't join multicast group addr %08x\n", (int)mcast);
return false; return false;
} }
else
mockverbose("joined multicast group addr %08lx\n", ntohl(mcast));
} }
return true; return true;