Skip to content

Commit d9200eb

Browse files
committed
Added WifiServer::begin(uint16_t port) method, listening port can be changed at runtime
1 parent 7b32e6a commit d9200eb

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

libraries/ESP8266WiFi/src/WiFiServer.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,34 @@ void WiFiServer::begin() {
8282
tcp_arg(listen_pcb, (void*) this);
8383
}
8484

85+
void WiFiServer::begin(uint16_t port) {
86+
close();
87+
_port = port;
88+
err_t err;
89+
tcp_pcb* pcb = tcp_new();
90+
if (!pcb)
91+
return;
92+
93+
ip_addr_t local_addr;
94+
local_addr.addr = (uint32_t) _addr;
95+
pcb->so_options |= SOF_REUSEADDR;
96+
err = tcp_bind(pcb, &local_addr, _port);
97+
98+
if (err != ERR_OK) {
99+
tcp_close(pcb);
100+
return;
101+
}
102+
103+
tcp_pcb* listen_pcb = tcp_listen(pcb);
104+
if (!listen_pcb) {
105+
tcp_close(pcb);
106+
return;
107+
}
108+
_pcb = listen_pcb;
109+
tcp_accept(listen_pcb, &WiFiServer::_s_accept);
110+
tcp_arg(listen_pcb, (void*) this);
111+
}
112+
85113
void WiFiServer::setNoDelay(bool nodelay) {
86114
_noDelay = nodelay;
87115
}

libraries/ESP8266WiFi/src/WiFiServer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class WiFiServer : public Server {
5151
WiFiClient available(uint8_t* status = NULL);
5252
bool hasClient();
5353
void begin();
54+
void begin(uint16_t port);
5455
void setNoDelay(bool nodelay);
5556
bool getNoDelay();
5657
virtual size_t write(uint8_t);

0 commit comments

Comments
 (0)