Skip to content

Commit 0374eb5

Browse files
committed
Fix calling WiFiUDP::begin(...) twice failing
1 parent 8af3680 commit 0374eb5

File tree

3 files changed

+13
-0
lines changed

3 files changed

+13
-0
lines changed

src/WiFiUdp.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ uint8_t WiFiUDP::begin(uint16_t port)
4646
addr.sin_port = _htons(port);
4747
addr.sin_addr.s_addr = 0;
4848

49+
if (_socket != -1 && WiFiSocket.bound(_socket)) {
50+
WiFiSocket.close(_socket);
51+
_socket = -1;
52+
}
53+
4954
// Open UDP server socket.
5055
if ((_socket = WiFiSocket.create(AF_INET, SOCK_DGRAM, 0)) < 0) {
5156
return 0;

src/utility/WiFiSocket.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,13 @@ uint8 WiFiSocketClass::listening(SOCKET sock)
172172
return (_info[sock].state == SOCKET_STATE_LISTENING);
173173
}
174174

175+
uint8 WiFiSocketClass::bound(SOCKET sock)
176+
{
177+
m2m_wifi_handle_events(NULL);
178+
179+
return (_info[sock].state == SOCKET_STATE_BOUND);
180+
}
181+
175182
int WiFiSocketClass::available(SOCKET sock)
176183
{
177184
m2m_wifi_handle_events(NULL);

src/utility/WiFiSocket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class WiFiSocketClass {
4040
sint8 connect(SOCKET sock, struct sockaddr *pstrAddr, uint8 u8AddrLen);
4141
uint8 connected(SOCKET sock);
4242
uint8 listening(SOCKET sock);
43+
uint8 bound(SOCKET sock);
4344
int available(SOCKET sock);
4445
int peek(SOCKET sock);
4546
int read(SOCKET sock, uint8_t* buf, size_t size);

0 commit comments

Comments
 (0)