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)