Skip to content

Commit 68676a1

Browse files
committed
UDP methods to allow joining or leaving multicast group
1 parent 538ec18 commit 68676a1

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/WiFiUdp.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,29 @@ uint8_t WiFiUDP::begin(uint16_t port)
6868
return 1;
6969
}
7070

71-
uint8_t WiFiUDP::beginMulticast(IPAddress ip, uint16_t port)
71+
uint8_t WiFiUDP::mcastGroupJoin(IPAddress ip)
72+
{
73+
uint32_t multiIp = ip;
74+
75+
return setsockopt(_socket, SOL_SOCKET, IP_ADD_MEMBERSHIP, &multiIp, sizeof(multiIp));
76+
}
77+
78+
uint8_t WiFiUDP::mcastGroupLeave(IPAddress ip)
7279
{
7380
uint32_t multiIp = ip;
7481

82+
return setsockopt(_socket, SOL_SOCKET, IP_DROP_MEMBERSHIP, &multiIp, sizeof(multiIp));
83+
}
84+
85+
uint8_t WiFiUDP::beginMulticast(IPAddress ip, uint16_t port)
86+
{
7587
if (!begin(port)) {
7688
return 0;
7789
}
7890

79-
setsockopt(_socket, SOL_SOCKET, IP_ADD_MEMBERSHIP, &multiIp, sizeof(multiIp));
91+
if (mcastGroupJoin(ip) != SOCK_ERR_NO_ERROR) {
92+
return 0;
93+
}
8094

8195
return 1;
8296
}

src/WiFiUdp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class WiFiUDP : public UDP {
4646
virtual uint8_t begin(uint16_t); // initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use
4747
virtual uint8_t beginMulticast(IPAddress, uint16_t); // initialize, start listening on specified multicast IP address and port. Returns 1 if successful, 0 if there are no sockets available to use
4848
virtual uint8_t beginMulti(IPAddress ip, uint16_t port) { return beginMulticast(ip, port); }
49+
virtual uint8_t mcastGroupJoin(IPAddress);
50+
virtual uint8_t mcastGroupLeave(IPAddress);
4951
virtual void stop(); // Finish with the UDP socket
5052

5153
// Sending UDP packets

0 commit comments

Comments
 (0)