Skip to content

Commit 22cca0f

Browse files
committed
esp32/modsocket.c: add in sendall and makefile methods micropython#10
1 parent 1de4289 commit 22cca0f

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

esp32/modsocket.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,34 @@ STATIC mp_obj_t socket_send(const mp_obj_t arg0, const mp_obj_t arg1) {
198198
}
199199
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_send_obj, socket_send);
200200

201+
STATIC mp_obj_t socket_sendall(const mp_obj_t arg0, const mp_obj_t arg1) {
202+
// XXX behaviour when nonblocking (see extmod/modlwip.c)
203+
// XXX also timeout behaviour.
204+
socket_obj_t *self = MP_OBJ_TO_PTR(arg0);
205+
mp_buffer_info_t bufinfo;
206+
mp_get_buffer_raise(arg1, &bufinfo, MP_BUFFER_READ);
207+
while (bufinfo.len != 0) {
208+
int ret = lwip_write(self->fd, bufinfo.buf, bufinfo.len);
209+
if (ret < 0) exception_from_errno(errno);
210+
bufinfo.len -= ret;
211+
bufinfo.buf = (char *)bufinfo.buf + ret;
212+
}
213+
return mp_const_none;
214+
}
215+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_sendall_obj, socket_sendall);
216+
201217
STATIC mp_obj_t socket_fileno(const mp_obj_t arg0) {
202218
socket_obj_t *self = MP_OBJ_TO_PTR(arg0);
203219
return mp_obj_new_int(self->fd);
204220
}
205221
STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_fileno_obj, socket_fileno);
206222

223+
STATIC mp_obj_t socket_makefile(mp_uint_t n_args, const mp_obj_t *args) {
224+
(void)n_args;
225+
return args[0];
226+
}
227+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_makefile_obj, 1, 3, socket_makefile);
228+
207229
STATIC mp_uint_t socket_stream_read(mp_obj_t self_in, void *buf, mp_uint_t size, int *errcode) {
208230
socket_obj_t *socket = self_in;
209231
int x = lwip_recvfrom(socket->fd, buf, size, 0, NULL, NULL);
@@ -262,14 +284,14 @@ STATIC const mp_map_elem_t socket_locals_dict_table[] = {
262284
{ MP_OBJ_NEW_QSTR(MP_QSTR_accept), (mp_obj_t)&socket_accept_obj },
263285
{ MP_OBJ_NEW_QSTR(MP_QSTR_connect), (mp_obj_t)&socket_connect_obj },
264286
{ MP_OBJ_NEW_QSTR(MP_QSTR_send), (mp_obj_t)&socket_send_obj },
265-
{ MP_OBJ_NEW_QSTR(MP_QSTR_sendall), mp_const_none },
287+
{ MP_OBJ_NEW_QSTR(MP_QSTR_sendall), (mp_obj_t)&socket_sendall_obj },
266288
{ MP_OBJ_NEW_QSTR(MP_QSTR_recv), (mp_obj_t)&socket_recv_obj },
267289
{ MP_OBJ_NEW_QSTR(MP_QSTR_sendto), mp_const_none },
268290
{ MP_OBJ_NEW_QSTR(MP_QSTR_recvfrom), mp_const_none },
269291
{ MP_OBJ_NEW_QSTR(MP_QSTR_setsockopt), mp_const_none },
270292
{ MP_OBJ_NEW_QSTR(MP_QSTR_settimeout), (mp_obj_t)&socket_settimeout_obj },
271293
{ MP_OBJ_NEW_QSTR(MP_QSTR_setblocking), (mp_obj_t)&socket_setblocking_obj },
272-
{ MP_OBJ_NEW_QSTR(MP_QSTR_makefile), mp_const_none },
294+
{ MP_OBJ_NEW_QSTR(MP_QSTR_makefile), (mp_obj_t)&socket_makefile_obj },
273295
{ MP_OBJ_NEW_QSTR(MP_QSTR_fileno), (mp_obj_t)&socket_fileno_obj },
274296

275297
{ MP_OBJ_NEW_QSTR(MP_QSTR_read), (mp_obj_t)&mp_stream_read_obj },

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy