@@ -55,9 +55,13 @@ bool common_hal_socketpool_socket_connect(socketpool_socket_obj_t* self, const c
5555 int flags ;
5656 esp_err_t err = esp_tls_get_and_clear_last_error (self -> tcp -> error_handle , & esp_tls_code , & flags );
5757
58- // mp_raise_espidf_MemoryError
59- mp_raise_OSError_msg_varg (translate ("Unhandled ESP TLS error %d %d %x" ), esp_tls_code , flags , err );
58+ if (err == ESP_ERR_MBEDTLS_SSL_SETUP_FAILED ) {
59+ mp_raise_espidf_MemoryError ();
60+ } else {
61+ mp_raise_OSError_msg_varg (translate ("Unhandled ESP TLS error %d %d %x" ), esp_tls_code , flags , err );
62+ }
6063 }
64+
6165 return self -> connected ;
6266}
6367
@@ -78,23 +82,35 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
7882 size_t received = 0 ;
7983 ssize_t last_read = 1 ;
8084 uint64_t start_ticks = supervisor_ticks_ms64 ();
85+ int sockfd ;
86+ esp_err_t err = esp_tls_get_conn_sockfd (self -> tcp , & sockfd );
87+ if (err != ESP_OK ) {
88+ mp_raise_OSError (MP_EBADF );
89+ }
8190 while (received < len &&
8291 last_read > 0 &&
8392 (self -> timeout_ms == 0 || supervisor_ticks_ms64 () - start_ticks <= self -> timeout_ms ) &&
8493 !mp_hal_is_interrupted ()) {
8594 RUN_BACKGROUND_TASKS ;
8695 size_t available = esp_tls_get_bytes_avail (self -> tcp );
87- ESP_EARLY_LOGW (TAG , "available %d" , available );
96+ if (available == 0 ) {
97+ // This reads the raw socket buffer and is used for non-TLS connections
98+ // and between encrypted TLS blocks.
99+ int status = lwip_ioctl (sockfd , FIONREAD , & available );
100+ if (status < 0 ) {
101+ // ESP_EARLY_LOGW(TAG, "ioctl fail. socket %d status %d errno %d available %d", sockfd, status, errno, available);
102+ last_read = status ;
103+ break ;
104+ }
105+ }
106+ // ESP_EARLY_LOGW(TAG, "available %d", available);
88107 size_t remaining = len - received ;
89108 if (available > remaining ) {
90109 available = remaining ;
91110 }
92- if (true || available > 0 ) {
93- if (available == 0 ) {
94- available = len - received ;
95- }
111+ if (available > 0 ) {
96112 last_read = esp_tls_conn_read (self -> tcp , (void * ) buf + received , available );
97- ESP_EARLY_LOGW (TAG , "read %d out of %d" , last_read , available );
113+ // ESP_EARLY_LOGW(TAG, "read %d out of %d", last_read, available);
98114 received += last_read ;
99115 }
100116 }
0 commit comments