Skip to content

Commit 4cdb298

Browse files
committed
WIP of non-blocking calls
1 parent 9a86829 commit 4cdb298

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ STATIC void _lazy_init_LWIP(socketpool_socket_obj_t* self) {
5151
mp_raise_RuntimeError(translate("Out of sockets"));
5252
}
5353
self->num = socknum;
54+
lwip_fcntl(socknum, F_SETFL, O_NONBLOCK);
5455
}
5556

5657
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,
8889
uint8_t* ip, uint *port) {
8990
struct sockaddr_in accept_addr;
9091
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);
92100

93101
memcpy((void *)ip, (void*)&accept_addr.sin_addr.s_addr, sizeof(accept_addr.sin_addr.s_addr));
94102
*port = accept_addr.sin_port;
95103

96104
if (newsoc > 0) {
105+
lwip_fcntl(newsoc, F_SETFL, O_NONBLOCK);
97106
return newsoc;
98107
} else {
99108
return 0;
@@ -169,7 +178,11 @@ mp_uint_t common_hal_socketpool_socket_recv_into(socketpool_socket_obj_t* self,
169178

170179
if (self->num != -1) {
171180
// LWIP Socket
181+
mp_printf(&mp_plat_print, "lwip_recv:\n");
182+
172183
received = lwip_recv(self->num, (void*) buf, len - 1, 0);
184+
mp_printf(&mp_plat_print, "received:%d\n",received);
185+
173186
} else if (self->tls != NULL) {
174187
// TLS Socket
175188
int status = 0;
@@ -257,7 +270,9 @@ mp_uint_t common_hal_socketpool_socket_recvfrom_into(socketpool_socket_obj_t* se
257270

258271
struct sockaddr_in source_addr;
259272
socklen_t socklen = sizeof(source_addr);
273+
mp_printf(&mp_plat_print, "recvfrom_into\n");
260274
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);
261276

262277
memcpy((void *)ip, (void*)&source_addr.sin_addr.s_addr, sizeof(source_addr.sin_addr.s_addr));
263278
*port = source_addr.sin_port;

shared-bindings/socketpool/Socket.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,10 @@ STATIC mp_obj_t socketpool_socket_recv_into(size_t n_args, const mp_obj_t *args)
213213
// Bad file number.
214214
mp_raise_OSError(MP_EBADF);
215215
}
216-
if (!common_hal_socketpool_socket_get_connected(self)) {
217-
// not connected
218-
mp_raise_OSError(MP_ENOTCONN);
219-
}
216+
// if (!common_hal_socketpool_socket_get_connected(self)) {
217+
// // not connected
218+
// mp_raise_OSError(MP_ENOTCONN);
219+
// }
220220
mp_buffer_info_t bufinfo;
221221
mp_get_buffer_raise(args[1], &bufinfo, MP_BUFFER_WRITE);
222222
mp_int_t len = bufinfo.len;

0 commit comments

Comments
 (0)