Skip to content

Commit 70bf6ab

Browse files
iabdalkaderdpgeorge
authored andcommitted
extmod/modusocket: Add socket state to track new/listening/conn/closed.
1 parent bd375df commit 70bf6ab

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

extmod/modnetwork.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@
4747
#define MOD_NETWORK_SO_SNDTIMEO (0x1005)
4848
#define MOD_NETWORK_SO_RCVTIMEO (0x1006)
4949

50+
#define MOD_NETWORK_SS_NEW (0)
51+
#define MOD_NETWORK_SS_LISTENING (1)
52+
#define MOD_NETWORK_SS_CONNECTED (2)
53+
#define MOD_NETWORK_SS_CLOSED (3)
54+
5055
#if MICROPY_PY_LWIP
5156
struct netif;
5257
void mod_network_lwip_init(void);
@@ -89,9 +94,10 @@ typedef struct _mod_network_socket_obj_t {
8994
int32_t fileno : 16;
9095
int32_t timeout;
9196
mp_obj_t callback;
97+
int32_t state : 8;
9298
#if MICROPY_PY_USOCKET_EXTENDED_STATE
9399
// Extended socket state for NICs/ports that need it.
94-
void *state;
100+
void *_private;
95101
#endif
96102
} mod_network_socket_obj_t;
97103

extmod/modusocket.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t
7373
}
7474
s->timeout = -1;
7575
s->callback = MP_OBJ_NULL;
76+
s->state = MOD_NETWORK_SS_NEW;
7677
#if MICROPY_PY_USOCKET_EXTENDED_STATE
77-
s->state = NULL;
78+
s->_private = NULL;
7879
#endif
7980

8081
return MP_OBJ_FROM_PTR(s);
@@ -143,6 +144,9 @@ STATIC mp_obj_t socket_listen(size_t n_args, const mp_obj_t *args) {
143144
mp_raise_OSError(_errno);
144145
}
145146

147+
// set socket state
148+
self->state = MOD_NETWORK_SS_LISTENING;
149+
146150
return mp_const_none;
147151
}
148152
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(socket_listen_obj, 1, 2, socket_listen);
@@ -171,8 +175,9 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) {
171175
socket2->fileno = -1;
172176
socket2->timeout = -1;
173177
socket2->callback = MP_OBJ_NULL;
178+
socket2->state = MOD_NETWORK_SS_NEW;
174179
#if MICROPY_PY_USOCKET_EXTENDED_STATE
175-
socket2->state = NULL;
180+
socket2->_private = NULL;
176181
#endif
177182

178183
// accept incoming connection
@@ -213,6 +218,9 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
213218
mp_raise_OSError(_errno);
214219
}
215220

221+
// set socket state
222+
self->state = MOD_NETWORK_SS_CONNECTED;
223+
216224
return mp_const_none;
217225
}
218226
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_connect_obj, socket_connect);
@@ -493,6 +501,7 @@ mp_uint_t socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *
493501
if (self->nic != MP_OBJ_NULL) {
494502
self->nic_type->close(self);
495503
self->nic = MP_OBJ_NULL;
504+
self->state = MOD_NETWORK_SS_CLOSED;
496505
}
497506
return 0;
498507
}

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