summaryrefslogtreecommitdiffstatshomepage
path: root/ports/esp32/modsocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/esp32/modsocket.c')
-rw-r--r--ports/esp32/modsocket.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/ports/esp32/modsocket.c b/ports/esp32/modsocket.c
index 31d153964c..8b3c280635 100644
--- a/ports/esp32/modsocket.c
+++ b/ports/esp32/modsocket.c
@@ -83,19 +83,6 @@ void check_for_exceptions() {
}
}
-STATIC mp_obj_t socket_close(const mp_obj_t arg0) {
- socket_obj_t *self = MP_OBJ_TO_PTR(arg0);
- if (self->fd >= 0) {
- int ret = lwip_close_r(self->fd);
- if (ret != 0) {
- exception_from_errno(errno);
- }
- self->fd = -1;
- }
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_close_obj, socket_close);
-
static int _socket_getaddrinfo2(const mp_obj_t host, const mp_obj_t portx, struct addrinfo **resp) {
const struct addrinfo hints = {
.ai_family = AF_INET,
@@ -450,6 +437,16 @@ STATIC mp_uint_t socket_stream_ioctl(mp_obj_t self_in, mp_uint_t request, uintpt
if (FD_ISSET(socket->fd, &wfds)) ret |= MP_STREAM_POLL_WR;
if (FD_ISSET(socket->fd, &efds)) ret |= MP_STREAM_POLL_HUP;
return ret;
+ } else if (request == MP_STREAM_CLOSE) {
+ if (socket->fd >= 0) {
+ int ret = lwip_close_r(socket->fd);
+ if (ret != 0) {
+ *errcode = errno;
+ return MP_STREAM_ERROR;
+ }
+ socket->fd = -1;
+ }
+ return 0;
}
*errcode = MP_EINVAL;
@@ -457,8 +454,8 @@ STATIC mp_uint_t socket_stream_ioctl(mp_obj_t self_in, mp_uint_t request, uintpt
}
STATIC const mp_map_elem_t socket_locals_dict_table[] = {
- { MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&socket_close_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&socket_close_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&mp_stream_close_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&mp_stream_close_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_bind), (mp_obj_t)&socket_bind_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_listen), (mp_obj_t)&socket_listen_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_accept), (mp_obj_t)&socket_accept_obj },