diff --git a/libraries/ESP8266WiFi/src/WiFiServer.cpp b/libraries/ESP8266WiFi/src/WiFiServer.cpp index b17899e1e9..b6a9505758 100644 --- a/libraries/ESP8266WiFi/src/WiFiServer.cpp +++ b/libraries/ESP8266WiFi/src/WiFiServer.cpp @@ -82,6 +82,34 @@ void WiFiServer::begin() { tcp_arg(listen_pcb, (void*) this); } +void WiFiServer::begin(uint16_t port) { + close(); + _port = port; + err_t err; + tcp_pcb* pcb = tcp_new(); + if (!pcb) + return; + + ip_addr_t local_addr; + local_addr.addr = (uint32_t) _addr; + pcb->so_options |= SOF_REUSEADDR; + err = tcp_bind(pcb, &local_addr, _port); + + if (err != ERR_OK) { + tcp_close(pcb); + return; + } + + tcp_pcb* listen_pcb = tcp_listen(pcb); + if (!listen_pcb) { + tcp_close(pcb); + return; + } + _pcb = listen_pcb; + tcp_accept(listen_pcb, &WiFiServer::_s_accept); + tcp_arg(listen_pcb, (void*) this); +} + void WiFiServer::setNoDelay(bool nodelay) { _noDelay = nodelay; } diff --git a/libraries/ESP8266WiFi/src/WiFiServer.h b/libraries/ESP8266WiFi/src/WiFiServer.h index 06f7d9c597..f10ff4b03a 100644 --- a/libraries/ESP8266WiFi/src/WiFiServer.h +++ b/libraries/ESP8266WiFi/src/WiFiServer.h @@ -51,6 +51,7 @@ class WiFiServer : public Server { WiFiClient available(uint8_t* status = NULL); bool hasClient(); void begin(); + void begin(uint16_t port); void setNoDelay(bool nodelay); bool getNoDelay(); virtual size_t write(uint8_t);