Skip to content

Commit 81bb92b

Browse files
authored
Merge pull request #3639 from tannewt/fix_recv
Rework socketpool.Socket.recv to return sooner
2 parents 8fc1be5 + 7441344 commit 81bb92b

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-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: 28 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
#
@@ -263,6 +264,11 @@ CONFIG_ESP32S2_ALLOW_RTC_FAST_MEM_AS_HEAP=y
263264
# CONFIG_PM_ENABLE is not set
264265
# end of Power Management
265266

267+
#
268+
# ADC-Calibration
269+
#
270+
# end of ADC-Calibration
271+
266272
#
267273
# Common ESP-related
268274
#
@@ -332,12 +338,13 @@ CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
332338
#
333339
# Wi-Fi
334340
#
335-
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
336-
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
341+
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=4
342+
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8
337343
# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
338344
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
339345
CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
340-
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
346+
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=16
347+
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16
341348
# CONFIG_ESP32_WIFI_CSI_ENABLED is not set
342349
CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
343350
CONFIG_ESP32_WIFI_TX_BA_WIN=6
@@ -401,6 +408,7 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
401408
# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
402409
CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
403410
# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
411+
# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
404412
CONFIG_FREERTOS_DEBUG_OCDAWARE=y
405413
# end of FreeRTOS
406414

@@ -439,7 +447,7 @@ CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
439447
# CONFIG_LWIP_L2_TO_L3_COPY is not set
440448
# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
441449
CONFIG_LWIP_TIMERS_ONDEMAND=y
442-
CONFIG_LWIP_MAX_SOCKETS=10
450+
CONFIG_LWIP_MAX_SOCKETS=4
443451
# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
444452
# CONFIG_LWIP_SO_LINGER is not set
445453
CONFIG_LWIP_SO_REUSE=y
@@ -459,6 +467,9 @@ CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
459467
CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
460468
# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
461469

470+
#
471+
# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
472+
462473
#
463474
# DHCP server
464475
#
@@ -474,15 +485,15 @@ CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
474485
#
475486
# TCP
476487
#
477-
CONFIG_LWIP_MAX_ACTIVE_TCP=16
478-
CONFIG_LWIP_MAX_LISTENING_TCP=16
488+
CONFIG_LWIP_MAX_ACTIVE_TCP=4
489+
CONFIG_LWIP_MAX_LISTENING_TCP=4
479490
CONFIG_LWIP_TCP_MAXRTX=12
480491
CONFIG_LWIP_TCP_SYNMAXRTX=6
481492
CONFIG_LWIP_TCP_MSS=1440
482493
CONFIG_LWIP_TCP_TMR_INTERVAL=250
483494
CONFIG_LWIP_TCP_MSL=60000
484-
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744
485-
CONFIG_LWIP_TCP_WND_DEFAULT=5744
495+
CONFIG_LWIP_TCP_SND_BUF_DEFAULT=2880
496+
CONFIG_LWIP_TCP_WND_DEFAULT=2880
486497
CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
487498
CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
488499
# CONFIG_LWIP_TCP_SACK_OUT is not set
@@ -505,6 +516,8 @@ CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
505516
# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
506517
CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
507518
# CONFIG_LWIP_PPP_SUPPORT is not set
519+
CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
520+
CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
508521
# CONFIG_LWIP_SLIP_SUPPORT is not set
509522

510523
#
@@ -552,8 +565,10 @@ CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
552565
# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
553566
CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
554567
CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
555-
CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
556-
# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
568+
CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=2048
569+
CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
570+
CONFIG_MBEDTLS_DYNAMIC_FREE_PEER_CERT=y
571+
CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y
557572
# CONFIG_MBEDTLS_DEBUG is not set
558573

559574
#
@@ -706,6 +721,7 @@ CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
706721
CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20
707722
CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1
708723
CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
724+
# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set
709725

710726
#
711727
# Auto-detect flash chips
@@ -824,8 +840,8 @@ CONFIG_TCP_MAXRTX=12
824840
CONFIG_TCP_SYNMAXRTX=6
825841
CONFIG_TCP_MSS=1440
826842
CONFIG_TCP_MSL=60000
827-
CONFIG_TCP_SND_BUF_DEFAULT=5744
828-
CONFIG_TCP_WND_DEFAULT=5744
843+
CONFIG_TCP_SND_BUF_DEFAULT=2880
844+
CONFIG_TCP_WND_DEFAULT=2880
829845
CONFIG_TCP_RECVMBOX_SIZE=6
830846
CONFIG_TCP_QUEUE_OOSEQ=y
831847
# CONFIG_ESP_TCP_KEEP_CONNECTION_WHEN_IP_CHANGES is not set

0 commit comments

Comments
 (0)