summaryrefslogtreecommitdiffstatshomepage
path: root/zephyr/modusocket.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-08-07 21:41:03 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2017-08-07 21:41:03 +0300
commit6c55cdafa32e4db9e2aaf08b1ec597b4723721ea (patch)
treeef24c0de3ea9fa9d483180f347108726e0614c0a /zephyr/modusocket.c
parent642d9fd2a57af682d1c176087a1a2c9ca3469dcb (diff)
downloadmicropython-6c55cdafa32e4db9e2aaf08b1ec597b4723721ea.tar.gz
micropython-6c55cdafa32e4db9e2aaf08b1ec597b4723721ea.zip
zephyr/modusocket: socket, close: Switch to native Zephyr socket calls.
Diffstat (limited to 'zephyr/modusocket.c')
-rw-r--r--zephyr/modusocket.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/zephyr/modusocket.c b/zephyr/modusocket.c
index ebd516fa2a..ff82ab67c8 100644
--- a/zephyr/modusocket.c
+++ b/zephyr/modusocket.c
@@ -37,6 +37,9 @@
#include <net/net_context.h>
#include <net/net_pkt.h>
#include <net/dns_resolve.h>
+#ifdef CONFIG_NET_SOCKETS
+#include <net/socket.h>
+#endif
#define DEBUG_PRINT 0
#if DEBUG_PRINT // print debugging info
@@ -103,6 +106,7 @@ static inline void _k_fifo_wait_non_empty(struct k_fifo *fifo, int32_t timeout)
// Helper functions
#define RAISE_ERRNO(x) { int _err = x; if (_err < 0) mp_raise_OSError(-_err); }
+#define RAISE_SOCK_ERRNO(x) { if ((int)(x) == -1) mp_raise_OSError(errno); }
STATIC void socket_check_closed(socket_obj_t *socket) {
if (socket->ctx == NULL) {
@@ -256,8 +260,13 @@ STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t
}
}
+ #ifdef CONFIG_NET_SOCKETS
+ socket->ctx = (void*)zsock_socket(family, socktype, proto);
+ RAISE_SOCK_ERRNO(socket->ctx);
+ #else
RAISE_ERRNO(net_context_get(family, socktype, proto, &socket->ctx));
k_fifo_init(&SOCK_FIELD(socket, recv_q));
+ #endif
return MP_OBJ_FROM_PTR(socket);
}
@@ -491,9 +500,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_makefile_obj, 1, 3, socket_mak
STATIC mp_obj_t socket_close(mp_obj_t self_in) {
socket_obj_t *socket = self_in;
- if (socket->ctx != NULL) {
- RAISE_ERRNO(net_context_put(socket->ctx));
- socket->ctx = NULL;
+ if (socket->ctx != -1) {
+ int res = zsock_close(socket->ctx);
+ RAISE_SOCK_ERRNO(res);
+ socket->ctx = -1;
}
return mp_const_none;
}