Allow faster reuse of socket, to be able to restart WifiServer. (#4306)
See #3960 for more details of the problem and the solution. I only implemented what was proposed in this ticket, as it solves my problem, which was the same as in this ticket. Credits for the code going to @etrinh ;-) This also is a more consistence behaviour compared to esp8266, where it also is possible to restart the wifiserver immediately on the same port.
This commit is contained in:
parent
dd1a15478f
commit
c6a8da61f7
@ -63,6 +63,10 @@ WiFiClient WiFiServer::available(){
|
||||
}
|
||||
|
||||
void WiFiServer::begin(uint16_t port){
|
||||
begin(port, 1);
|
||||
}
|
||||
|
||||
void WiFiServer::begin(uint16_t port, int enable){
|
||||
if(_listening)
|
||||
return;
|
||||
if(port){
|
||||
@ -72,6 +76,7 @@ void WiFiServer::begin(uint16_t port){
|
||||
sockfd = socket(AF_INET , SOCK_STREAM, 0);
|
||||
if (sockfd < 0)
|
||||
return;
|
||||
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int));
|
||||
server.sin_family = AF_INET;
|
||||
server.sin_addr.s_addr = INADDR_ANY;
|
||||
server.sin_port = htons(_port);
|
||||
|
@ -40,6 +40,7 @@ class WiFiServer : public Server {
|
||||
WiFiClient available();
|
||||
WiFiClient accept(){return available();}
|
||||
void begin(uint16_t port=0);
|
||||
void begin(uint16_t port, int reuse_enable);
|
||||
void setNoDelay(bool nodelay);
|
||||
bool getNoDelay();
|
||||
bool hasClient();
|
||||
|
Loading…
Reference in New Issue
Block a user