@@ -38,7 +38,7 @@ template<>
3838WiFiUDP* SList<WiFiUDP>::_s_first = 0 ;
3939
4040/* Constructor */
41- WiFiUDP::WiFiUDP () : _ctx(0 ), _multicast(false ) {
41+ WiFiUDP::WiFiUDP () : _ctx(0 ), _multicast(false ), _dirty( false ) {
4242 WiFiUDP::_add (this );
4343}
4444
@@ -49,6 +49,7 @@ WiFiUDP::WiFiUDP(const WiFiUDP& other) {
4949 }
5050 WiFiUDP::_add (this );
5151 _multicast = other._multicast ;
52+ _dirty = other._dirty ;
5253}
5354
5455WiFiUDP& WiFiUDP::operator =(const WiFiUDP& rhs) {
@@ -149,6 +150,7 @@ int WiFiUDP::beginPacket(IPAddress ip, uint16_t port) {
149150 _ctx->setMulticastInterface (IP_ADDR_ANY);
150151 _ctx->setMulticastTTL (255 );
151152 }
153+ _dirty = false ;
152154 return ret;
153155
154156}
@@ -164,13 +166,15 @@ int WiFiUDP::beginPacketMulticast(IPAddress multicastAddress, uint16_t port,
164166 }
165167 _ctx->setMulticastInterface (interfaceAddress);
166168 _ctx->setMulticastTTL (ttl);
169+ _dirty = false ;
167170 return 1 ;
168171}
169172
170173int WiFiUDP::endPacket () {
171174 if (!_ctx) {
172175 return 0 ;
173176 }
177+ _dirty = false ;
174178
175179 return (_ctx->send ()) ? 1 : 0 ;
176180}
@@ -183,7 +187,7 @@ size_t WiFiUDP::write(const uint8_t *buffer, size_t size) {
183187 if (!_ctx) {
184188 return 0 ;
185189 }
186-
190+ _dirty = true ;
187191 return _ctx->append (reinterpret_cast <const char *>(buffer), size);
188192}
189193
@@ -224,7 +228,9 @@ int WiFiUDP::peek() {
224228}
225229
226230void WiFiUDP::flush () {
227- endPacket ();
231+ if (_dirty) {
232+ endPacket ();
233+ }
228234}
229235
230236IPAddress WiFiUDP::remoteIP () {
0 commit comments