From 49aeb79b057bba9eb6643b0bdfe29a6f14c94711 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Sun, 24 May 2015 23:15:05 +0300 Subject: [PATCH] Add API to set the beginning of local ports range for WiFiClient --- libraries/ESP8266WiFi/src/WiFiClient.cpp | 6 ++++++ libraries/ESP8266WiFi/src/WiFiClient.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 534c7fa89..056d5bb65 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -40,6 +40,8 @@ extern "C" #include "include/ClientContext.h" #include "c_types.h" +uint16_t WiFiClient::_localPort = 0; + ICACHE_FLASH_ATTR WiFiClient::WiFiClient() : _client(0) { @@ -93,6 +95,10 @@ int ICACHE_FLASH_ATTR WiFiClient::connect(IPAddress ip, uint16_t port) if (!pcb) return 0; + if (_localPort > 0) { + pcb->local_port = _localPort++; + } + ip_addr_t addr; addr.addr = ip; tcp_arg(pcb, this); diff --git a/libraries/ESP8266WiFi/src/WiFiClient.h b/libraries/ESP8266WiFi/src/WiFiClient.h index f4063cbba..a15cb1b68 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.h +++ b/libraries/ESP8266WiFi/src/WiFiClient.h @@ -61,6 +61,7 @@ public: uint16_t remotePort(); bool getNoDelay(); void setNoDelay(bool nodelay); + static void setLocalPortStart(uint16_t port) { _localPort = port; } template size_t write(T &src){ uint8_t obuf[1460]; @@ -97,6 +98,7 @@ private: void _err(int8_t err); ClientContext* _client; + static uint16_t _localPort; };