From d87bc938f92f7758ca516b604ee9edcdef6ca829 Mon Sep 17 00:00:00 2001 From: Markus Sattler Date: Thu, 2 Apr 2015 19:11:06 +0200 Subject: [PATCH] disable tcp_bind for WiFiClient (tcp_connect gets automatic a free src port) --- libraries/ESP8266WiFi/src/WiFiClient.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 073b2b8bc..333ebd94a 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -40,10 +40,15 @@ extern "C" #include "include/ClientContext.h" #include "c_types.h" + +#define NO_PORT_BIND + +#ifndef NO_PORT_BIND #define MIN_LOCAL_PORT 1024 #define MAX_LOCAL_PORT 1124 static int g_localPort = MIN_LOCAL_PORT; +#endif ICACHE_FLASH_ATTR WiFiClient::WiFiClient() : _client(0) @@ -97,7 +102,7 @@ int ICACHE_FLASH_ATTR WiFiClient::connect(IPAddress ip, uint16_t port) tcp_pcb* pcb = tcp_new(); if (!pcb) return 0; - +#ifndef NO_PORT_BIND while(true) { err_t err = tcp_bind(pcb, INADDR_ANY, g_localPort); @@ -105,11 +110,14 @@ int ICACHE_FLASH_ATTR WiFiClient::connect(IPAddress ip, uint16_t port) g_localPort = MIN_LOCAL_PORT; if (err == ERR_OK) break; - if (err == ERR_USE) + if (err == ERR_USE) { + esp_yield(); continue; + } tcp_abort(pcb); return 0; } +#endif ip_addr_t addr; addr.addr = ip; tcp_arg(pcb, this);