@@ -38,7 +38,7 @@ template<>
3838WiFiUDP* SList<WiFiUDP>::_s_first = 0 ;
3939
4040/* Constructor */
41- WiFiUDP::WiFiUDP () : _ctx(0 ) {
41+ WiFiUDP::WiFiUDP () : _ctx(0 ), _multicast( false ) {
4242 WiFiUDP::_add (this );
4343}
4444
@@ -48,6 +48,7 @@ WiFiUDP::WiFiUDP(const WiFiUDP& other) {
4848 _ctx->ref ();
4949 }
5050 WiFiUDP::_add (this );
51+ _multicast = other._multicast ;
5152}
5253
5354WiFiUDP& WiFiUDP::operator =(const WiFiUDP& rhs) {
@@ -97,6 +98,12 @@ uint8_t WiFiUDP::beginMulticast(IPAddress interfaceAddr, IPAddress multicast, ui
9798 return 1 ;
9899}
99100
101+ uint8_t WiFiUDP::beginMulticast (IPAddress addr, uint16_t port) {
102+ auto ret = beginMulticast (IP_ADDR_ANY, addr, port);
103+ _multicast = true ;
104+ return ret;
105+ }
106+
100107/* return number of bytes available in the current packet,
101108 will return zero if parsePacket hasn't been called yet */
102109int WiFiUDP::available () {
@@ -137,7 +144,13 @@ int WiFiUDP::beginPacket(IPAddress ip, uint16_t port) {
137144 _ctx = new UdpContext;
138145 _ctx->ref ();
139146 }
140- return (_ctx->connect (ip, port)) ? 1 : 0 ;
147+ auto ret = (_ctx->connect (ip, port)) ? 1 : 0 ;
148+ if (_multicast) {
149+ _ctx->setMulticastInterface (IP_ADDR_ANY);
150+ _ctx->setMulticastTTL (255 );
151+ }
152+ return ret;
153+
141154}
142155
143156int WiFiUDP::beginPacketMulticast (IPAddress multicastAddress, uint16_t port,
0 commit comments