diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-20 02:00:12 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2014-04-20 13:08:33 +0300 |
commit | 9fd02e186d86f42e51383b16878c96645db40d6e (patch) | |
tree | 0978519389423d43c128571013ef9649d3a5b671 /unix/modsocket.c | |
parent | 0f836ef893f54726580589951ae46638eb7afff8 (diff) | |
download | micropython-9fd02e186d86f42e51383b16878c96645db40d6e.tar.gz micropython-9fd02e186d86f42e51383b16878c96645db40d6e.zip |
modsocket: Add setblocking() method.
Diffstat (limited to 'unix/modsocket.c')
-rw-r--r-- | unix/modsocket.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/unix/modsocket.c b/unix/modsocket.c index bfa5849c86..6a2ada91f1 100644 --- a/unix/modsocket.c +++ b/unix/modsocket.c @@ -2,6 +2,7 @@ #include <assert.h> #include <string.h> #include <unistd.h> +#include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/socket.h> @@ -179,6 +180,22 @@ STATIC mp_obj_t socket_setsockopt(uint n_args, const mp_obj_t *args) { } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_setsockopt_obj, 4, 4, socket_setsockopt); +STATIC mp_obj_t socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) { + mp_obj_socket_t *self = self_in; + int val = mp_obj_is_true(flag_in); + int flags = fcntl(self->fd, F_GETFL, 0); + RAISE_ERRNO(flags, errno); + if (val) { + flags &= ~O_NONBLOCK; + } else { + flags |= O_NONBLOCK; + } + flags = fcntl(self->fd, F_SETFL, flags); + RAISE_ERRNO(flags, errno); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_setblocking_obj, socket_setblocking); + STATIC mp_obj_t socket_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) { int family = AF_INET; int type = SOCK_STREAM; @@ -216,6 +233,7 @@ STATIC const mp_map_elem_t microsocket_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_recv), (mp_obj_t)&socket_recv_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_send), (mp_obj_t)&socket_send_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_setsockopt), (mp_obj_t)&socket_setsockopt_obj }, + { MP_OBJ_NEW_QSTR(MP_QSTR_setblocking), (mp_obj_t)&socket_setblocking_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&socket_close_obj }, #if MICROPY_SOCKET_EXTRA { MP_OBJ_NEW_QSTR(MP_QSTR_recv), (mp_obj_t)&mp_stream_read_obj }, |