summaryrefslogtreecommitdiffstatshomepage
path: root/unix/modsocket.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-08-07 01:21:42 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2016-08-07 01:25:59 +0300
commita4aaf824219818c421b85436b0bf8f67468590d9 (patch)
treeb8ff43cdbe292b4722266c6282cbc6a0229056ab /unix/modsocket.c
parentfdb411a8c5f3c67fa8f2febf98a9bcdb54bbc095 (diff)
downloadmicropython-a4aaf824219818c421b85436b0bf8f67468590d9.tar.gz
micropython-a4aaf824219818c421b85436b0bf8f67468590d9.zip
unix/moduselect: Allow poll.register(), etc. accept fd-like objects.
This includes file and socket objects, backed by Unix file descriptor. This improves compatibility with stmhal's uselect (and convenience of use), though not completely: return value from poll.poll() is still raw file descriptor.
Diffstat (limited to 'unix/modsocket.c')
-rw-r--r--unix/modsocket.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/unix/modsocket.c b/unix/modsocket.c
index cd68b20a45..56bab3494a 100644
--- a/unix/modsocket.c
+++ b/unix/modsocket.c
@@ -62,12 +62,14 @@
#define MICROPY_SOCKET_EXTRA (0)
+// This type must "inherit" from mp_obj_fdfile_t, i.e. matching subset of
+// fields should have the same layout.
typedef struct _mp_obj_socket_t {
mp_obj_base_t base;
int fd;
} mp_obj_socket_t;
-STATIC const mp_obj_type_t usocket_type;
+const mp_obj_type_t mp_type_socket;
// Helper functions
#define RAISE_ERRNO(err_flag, error_val) \
@@ -80,7 +82,7 @@ static inline mp_obj_t mp_obj_from_sockaddr(const struct sockaddr *addr, socklen
STATIC mp_obj_socket_t *socket_new(int fd) {
mp_obj_socket_t *o = m_new_obj(mp_obj_socket_t);
- o->base.type = &usocket_type;
+ o->base.type = &mp_type_socket;
o->fd = fd;
return o;
}
@@ -374,7 +376,7 @@ STATIC const mp_stream_p_t usocket_stream_p = {
.write = socket_write,
};
-STATIC const mp_obj_type_t usocket_type = {
+const mp_obj_type_t mp_type_socket = {
{ &mp_type_type },
.name = MP_QSTR_socket,
.print = socket_print,
@@ -550,7 +552,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_socket_sockaddr_obj, mod_socket_sockaddr);
STATIC const mp_rom_map_elem_t mp_module_socket_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_usocket) },
- { MP_ROM_QSTR(MP_QSTR_socket), MP_ROM_PTR(&usocket_type) },
+ { MP_ROM_QSTR(MP_QSTR_socket), MP_ROM_PTR(&mp_type_socket) },
{ MP_ROM_QSTR(MP_QSTR_getaddrinfo), MP_ROM_PTR(&mod_socket_getaddrinfo_obj) },
{ MP_ROM_QSTR(MP_QSTR_inet_pton), MP_ROM_PTR(&mod_socket_inet_pton_obj) },
{ MP_ROM_QSTR(MP_QSTR_inet_ntop), MP_ROM_PTR(&mod_socket_inet_ntop_obj) },