Skip to content

Commit

Permalink
UDP methods to allow joining or leaving multicast group
Browse files Browse the repository at this point in the history
  • Loading branch information
rom1sqr committed Apr 30, 2024
1 parent 538ec18 commit 68676a1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/WiFiUdp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,29 @@ uint8_t WiFiUDP::begin(uint16_t port)
return 1;
}

uint8_t WiFiUDP::beginMulticast(IPAddress ip, uint16_t port)
uint8_t WiFiUDP::mcastGroupJoin(IPAddress ip)
{
uint32_t multiIp = ip;

return setsockopt(_socket, SOL_SOCKET, IP_ADD_MEMBERSHIP, &multiIp, sizeof(multiIp));
}

uint8_t WiFiUDP::mcastGroupLeave(IPAddress ip)
{
uint32_t multiIp = ip;

return setsockopt(_socket, SOL_SOCKET, IP_DROP_MEMBERSHIP, &multiIp, sizeof(multiIp));
}

uint8_t WiFiUDP::beginMulticast(IPAddress ip, uint16_t port)
{
if (!begin(port)) {
return 0;
}

setsockopt(_socket, SOL_SOCKET, IP_ADD_MEMBERSHIP, &multiIp, sizeof(multiIp));
if (mcastGroupJoin(ip) != SOCK_ERR_NO_ERROR) {
return 0;
}

return 1;
}
Expand Down
2 changes: 2 additions & 0 deletions src/WiFiUdp.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ class WiFiUDP : public UDP {
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
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
virtual uint8_t beginMulti(IPAddress ip, uint16_t port) { return beginMulticast(ip, port); }
virtual uint8_t mcastGroupJoin(IPAddress);
virtual uint8_t mcastGroupLeave(IPAddress);
virtual void stop(); // Finish with the UDP socket

// Sending UDP packets
Expand Down

0 comments on commit 68676a1

Please sign in to comment.