Skip to content

Commit 18838e3

Browse files
committed
reduce connection footprint and fix recv
1 parent 73582c9 commit 18838e3

File tree

2 files changed

+31
-24
lines changed

2 files changed

+31
-24
lines changed

ports/esp32s2/common-hal/socketpool/Socket.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,43 +79,41 @@ mp_uint_t common_hal_socketpool_socket_send(socketpool_socket_obj_t* self, const
7979

8080
mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self, const uint8_t* buf, mp_uint_t len) {
8181
size_t received = 0;
82-
ssize_t last_read = 1;
82+
int status = 0;
8383
uint64_t start_ticks = supervisor_ticks_ms64();
8484
int sockfd;
8585
esp_err_t err = esp_tls_get_conn_sockfd(self->tcp, &sockfd);
8686
if (err != ESP_OK) {
8787
mp_raise_OSError(MP_EBADF);
8888
}
89-
while (received < len &&
90-
last_read > 0 &&
89+
while (received == 0 &&
90+
status >= 0 &&
9191
(self->timeout_ms == 0 || supervisor_ticks_ms64() - start_ticks <= self->timeout_ms) &&
9292
!mp_hal_is_interrupted()) {
9393
RUN_BACKGROUND_TASKS;
9494
size_t available = esp_tls_get_bytes_avail(self->tcp);
9595
if (available == 0) {
9696
// This reads the raw socket buffer and is used for non-TLS connections
9797
// and between encrypted TLS blocks.
98-
int status = lwip_ioctl(sockfd, FIONREAD, &available);
99-
if (status < 0) {
100-
last_read = status;
101-
break;
102-
}
98+
status = lwip_ioctl(sockfd, FIONREAD, &available);
10399
}
104100
size_t remaining = len - received;
105101
if (available > remaining) {
106102
available = remaining;
107103
}
108104
if (available > 0) {
109-
last_read = esp_tls_conn_read(self->tcp, (void*) buf + received, available);
110-
received += last_read;
105+
status = esp_tls_conn_read(self->tcp, (void*) buf + received, available);
106+
if (status > 0) {
107+
received += status;
108+
}
111109
}
112110
}
113111

114-
if (last_read == 0) {
112+
if (received == 0) {
115113
// socket closed
116114
common_hal_socketpool_socket_close(self);
117115
}
118-
if (last_read < 0) {
116+
if (status < 0) {
119117
mp_raise_BrokenPipeError();
120118
}
121119
return received;

ports/esp32s2/esp-idf-config/sdkconfig.defaults

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
135135
# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
136136
# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
137137
# CONFIG_COMPILER_DISABLE_GCC8_WARNINGS is not set
138+
# CONFIG_COMPILER_DUMP_RTL_FILES is not set
138139
# end of Compiler options
139140

140141
#
@@ -332,12 +333,13 @@ CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
332333
#
333334
# Wi-Fi
334335
#
335-
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
336-
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
336+
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=4
337+
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8
337338
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
338339
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
339340
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
340-
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
341+
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=16
342+
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16
341343
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
342344
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
343345
CONFIG_ESP32_WIFI_TX_BA_WIN=6
@@ -439,7 +441,7 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
439441
# CONFIG_LWIP_L2_TO_L3_COPY is not set
440442
# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
441443
CONFIG_LWIP_TIMERS_ONDEMAND=y
442-
CONFIG_LWIP_MAX_SOCKETS=10
444+
CONFIG_LWIP_MAX_SOCKETS=4
443445
# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
444446
# CONFIG_LWIP_SO_LINGER is not set
445447
CONFIG_LWIP_SO_REUSE=y
@@ -459,6 +461,9 @@ CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
459461
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
460462
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
461463

464+
#
465+
# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
466+
462467
#
463468
# DHCP server
464469
#
@@ -474,15 +479,15 @@ CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
474479
#
475480
# TCP
476481
#
477-
CONFIG_LWIP_MAX_ACTIVE_TCP=16
478-
CONFIG_LWIP_MAX_LISTENING_TCP=16
482+
CONFIG_LWIP_MAX_ACTIVE_TCP=4
483+
CONFIG_LWIP_MAX_LISTENING_TCP=4
479484
CONFIG_LWIP_TCP_MAXRTX=12
480485
CONFIG_LWIP_TCP_SYNMAXRTX=6
481486
CONFIG_LWIP_TCP_MSS=1440
482487
CONFIG_LWIP_TCP_TMR_INTERVAL=250
483488
CONFIG_LWIP_TCP_MSL=60000
484-
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
485-
CONFIG_LWIP_TCP_WND_DEFAULT=5744
489+
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=2880
490+
CONFIG_LWIP_TCP_WND_DEFAULT=2880
486491
CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
487492
CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
488493
# CONFIG_LWIP_TCP_SACK_OUT is not set
@@ -505,6 +510,8 @@ CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
505510
# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
506511
CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
507512
# CONFIG_LWIP_PPP_SUPPORT is not set
513+
CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
514+
CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
508515
# CONFIG_LWIP_SLIP_SUPPORT is not set
509516

510517
#
@@ -552,8 +559,10 @@ CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
552559
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
553560
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
554561
CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
555-
CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
556-
# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
562+
CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=2048
563+
CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
564+
CONFIG_MBEDTLS_DYNAMIC_FREE_PEER_CERT=y
565+
CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y
557566
# CONFIG_MBEDTLS_DEBUG is not set
558567

559568
#
@@ -824,8 +833,8 @@ CONFIG_TCP_MAXRTX=12
824833
CONFIG_TCP_SYNMAXRTX=6
825834
CONFIG_TCP_MSS=1440
826835
CONFIG_TCP_MSL=60000
827-
CONFIG_TCP_SND_BUF_DEFAULT=5744
828-
CONFIG_TCP_WND_DEFAULT=5744
836+
CONFIG_TCP_SND_BUF_DEFAULT=2880
837+
CONFIG_TCP_WND_DEFAULT=2880
829838
CONFIG_TCP_RECVMBOX_SIZE=6
830839
CONFIG_TCP_QUEUE_OOSEQ=y
831840
# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set

0 commit comments

Comments
 (0)