@@ -51,6 +51,7 @@ STATIC void _lazy_init_LWIP(socketpool_socket_obj_t* self) {
51
51
mp_raise_RuntimeError (translate ("Out of sockets" ));
52
52
}
53
53
self -> num = socknum ;
54
+ lwip_fcntl (socknum , F_SETFL , O_NONBLOCK );
54
55
}
55
56
56
57
STATIC void _lazy_init_TLS (socketpool_socket_obj_t * self ) {
@@ -88,12 +89,20 @@ int common_hal_socketpool_socket_accept(socketpool_socket_obj_t* self,
88
89
uint8_t * ip , uint * port ) {
89
90
struct sockaddr_in accept_addr ;
90
91
socklen_t socklen = sizeof (accept_addr );
91
- int newsoc = lwip_accept (self -> num , (struct sockaddr * )& accept_addr , & socklen );
92
+
93
+ int newsoc = -1 ;
94
+ //(self->timeout_ms == 0 || supervisor_ticks_ms64() - start_ticks <= self->timeout_ms)
95
+ while ((newsoc == -1 ) && !mp_hal_is_interrupted () ) {
96
+ RUN_BACKGROUND_TASKS ;
97
+ newsoc = lwip_accept (self -> num , (struct sockaddr * )& accept_addr , & socklen );
98
+ }
99
+ mp_printf (& mp_plat_print , "oldsoc:%d newsoc:%d\n" ,self -> num , newsoc );
92
100
93
101
memcpy ((void * )ip , (void * )& accept_addr .sin_addr .s_addr , sizeof (accept_addr .sin_addr .s_addr ));
94
102
* port = accept_addr .sin_port ;
95
103
96
104
if (newsoc > 0 ) {
105
+ lwip_fcntl (newsoc , F_SETFL , O_NONBLOCK );
97
106
return newsoc ;
98
107
} else {
99
108
return 0 ;
@@ -169,7 +178,11 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
169
178
170
179
if (self -> num != -1 ) {
171
180
// LWIP Socket
181
+ mp_printf (& mp_plat_print , "lwip_recv:\n" );
182
+
172
183
received = lwip_recv (self -> num , (void * ) buf , len - 1 , 0 );
184
+ mp_printf (& mp_plat_print , "received:%d\n" ,received );
185
+
173
186
} else if (self -> tls != NULL ) {
174
187
// TLS Socket
175
188
int status = 0 ;
@@ -257,7 +270,9 @@ mp_uint_t common_hal_socketpool_socket_recvfrom_into(socketpool_socket_obj_t* se
257
270
258
271
struct sockaddr_in source_addr ;
259
272
socklen_t socklen = sizeof (source_addr );
273
+ mp_printf (& mp_plat_print , "recvfrom_into\n" );
260
274
int bytes_received = lwip_recvfrom (self -> num , buf , len - 1 , 0 , (struct sockaddr * )& source_addr , & socklen );
275
+ mp_printf (& mp_plat_print , "received:%d\n" ,bytes_received );
261
276
262
277
memcpy ((void * )ip , (void * )& source_addr .sin_addr .s_addr , sizeof (source_addr .sin_addr .s_addr ));
263
278
* port = source_addr .sin_port ;
0 commit comments