Skip to content

Commit e93ad43

Browse files
committed
Add not listening check in WiFiServer::available()
In case WiFi interface goes down and all sockets are closed.
1 parent 034134f commit e93ad43

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

src/WiFiServer.cpp

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

49+
if (_socket != -1) {
50+
WiFiSocket.close(_socket);
51+
_socket = -1;
52+
}
53+
4954
// Open TCP server socket.
5055
if ((_socket = WiFiSocket.create(AF_INET, SOCK_STREAM, opt)) < 0) {
5156
return 0;
@@ -74,6 +79,10 @@ WiFiClient WiFiServer::available(uint8_t* status)
7479
*status = 0;
7580
}
7681

82+
if (_socket != -1 && !WiFiSocket.listening(_socket)) {
83+
_socket = -1;
84+
}
85+
7786
if (_socket != -1) {
7887
SOCKET child = WiFiSocket.accepted(_socket);
7988

src/utility/WiFiSocket.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ uint8 WiFiSocketClass::connected(SOCKET sock)
165165
return (_info[sock].state == SOCKET_STATE_CONNECTED);
166166
}
167167

168+
uint8 WiFiSocketClass::listening(SOCKET sock)
169+
{
170+
m2m_wifi_handle_events(NULL);
171+
172+
return (_info[sock].state == SOCKET_STATE_LISTENING);
173+
}
174+
168175
int WiFiSocketClass::available(SOCKET sock)
169176
{
170177
m2m_wifi_handle_events(NULL);

src/utility/WiFiSocket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class WiFiSocketClass {
3939
sint8 setopt(SOCKET socket, uint8 u8Level, uint8 option_name, const void *option_value, uint16 u16OptionLen);
4040
sint8 connect(SOCKET sock, struct sockaddr *pstrAddr, uint8 u8AddrLen);
4141
uint8 connected(SOCKET sock);
42+
uint8 listening(SOCKET sock);
4243
int available(SOCKET sock);
4344
int peek(SOCKET sock);
4445
int read(SOCKET sock, uint8_t* buf, size_t size);

0 commit comments

Comments
 (0)