8000 extmod/modnetwork: Remove modnetwork socket u_state member. · micropython/micropython@d9749f9 · GitHub
[go: up one dir, main page]

Skip to content

Commit d9749f9

Browse files
iabdalkaderdpgeorge
authored andcommitted
extmod/modnetwork: Remove modnetwork socket u_state member.
To simplify the socket state. The CC3K driver (see drivers/cc3000/inc/socket.h and src/socket.c) has socket() returning an INT16 so there is now enough room to store it directly in the fileno member.
1 parent f9d573a commit d9749f9

File tree

4 files changed

+68
-69
lines changed

4 files changed

+68
-69
lines changed

extmod/modnetwork.h

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,11 @@ typedef struct _mod_network_socket_obj_t {
7272
mp_obj_base_t base;
7373
mp_obj_t nic;
7474
mod_network_nic_type_t *nic_type;
75-
union {
76-
struct {
77-
uint8_t domain;
78-
uint8_t type;
79-
int8_t fileno;
80-
uint8_t bound;
81-
} u_param;
82-
mp_uint_t u_state;
83-
};
75+
uint32_t domain : 5;
76+
uint32_t type : 5;
77+
uint32_t proto : 5;
78+
uint32_t bound : 1;
79+
int32_t fileno : 16;
8480
#if MICROPY_PY_USOCKET_EXTENDED_STATE
8581
// Extended socket state for NICs/ports that need it.
8682
int32_t timeout;

extmod/modusocket.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,17 @@ STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t
5151
s->base.type = &socket_type;
5252
s->nic = MP_OBJ_NULL;
5353
s->nic_type = NULL;
54-
s->u_param.domain = MOD_NETWORK_AF_INET;
55-
s->u_param.type = MOD_NETWORK_SOCK_STREAM;
56-
s->u_param.fileno = -1;
57-
s->u_param.bound = false;
54+
s->domain = MOD_NETWORK_AF_INET;
55+
s->type = MOD_NETWORK_SOCK_STREAM;
56+
s->proto = 0;
57+
s->bound = false;
58+
s->fileno = -1;
5859
if (n_args >= 1) {
59-
s->u_param.domain = mp_obj_get_int(args[0]);
60+
s->domain = mp_obj_get_int(args[0]);
6061
if (n_args >= 2) {
61-
s->u_param.type = mp_obj_get_int(args[1]);
62+
s->type = mp_obj_get_int(args[1]);
6263
if (n_args >= 4) {
63-
s->u_param.fileno = mp_obj_get_int(args[3]);
64+
s->fileno = mp_obj_get_int(args[3]);
6465
}
6566
}
6667
}

ports/stm32/modnwcc3k.c

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,13 @@ STATIC int cc3k_gethostbyname(mp_obj_t nic, const char *name, mp_uint_t len, uin
136136
}
137137

138138
STATIC int cc3k_socket_socket(mod_network_socket_obj_t *socket, int *_errno) {
139-
if (socket->u_param.domain != MOD_NETWORK_AF_INET) {
139+
if (socket->domain != MOD_NETWORK_AF_INET) {
140140
*_errno = MP_EAFNOSUPPORT;
141141
return -1;
142142
}
143143

144144
mp_uint_t type;
145-
switch (socket->u_param.type) {
145+
switch (socket->type) {
146146
case MOD_NETWORK_SOCK_STREAM:
147147
type = SOCK_STREAM;
148148
break;
@@ -168,23 +168,23 @@ STATIC int cc3k_socket_socket(mod_network_socket_obj_t *socket, int *_errno) {
168168
cc3k_reset_fd_closed_state(fd);
169169

170170
// store state of this socket
171-
socket->u_state = fd;
171+
socket->fileno = fd;
172172

173173
// make accept blocking by default
174174
int optval = SOCK_OFF;
175175
socklen_t optlen = sizeof(optval);
176-
CC3000_EXPORT(setsockopt)(socket->u_state, SOL_SOCKET, SOCKOPT_ACCEPT_NONBLOCK, &optval, optlen);
176+
CC3000_EXPORT(setsockopt)(socket->fileno, SOL_SOCKET, SOCKOPT_ACCEPT_NONBLOCK, &optval, optlen);
177177

178178
return 0;
179179
}
180180

181181
STATIC void cc3k_socket_close(mod_network_socket_obj_t *socket) {
182-
CC3000_EXPORT(closesocket)(socket->u_state);
182+
CC3000_EXPORT(closesocket)(socket->fileno);
183183
}
184184

185185
STATIC int cc3k_socket_bind(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) {
186186
MAKE_SOCKADDR(addr, ip, port)
187-
int ret = CC3000_EXPORT(bind)(socket->u_state, &addr, sizeof(addr));
187+
int ret = CC3000_EXPORT(bind)(socket->fileno, &addr, sizeof(addr));
188188
if (ret != 0) {
189189
*_errno = ret;
190190
return -1;
@@ -193,7 +193,7 @@ STATIC int cc3k_socket_bind(mod_network_socket_obj_t *socket, byte *ip, mp_uint_
193193
}
194194

195195
STATIC int cc3k_socket_listen(mod_network_socket_obj_t *socket, mp_int_t backlog, int *_errno) {
196-
int ret = CC3000_EXPORT(listen)(socket->u_state, backlog);
196+
int ret = CC3000_EXPORT(listen)(socket->fileno, backlog);
197197
if (ret != 0) {
198198
*_errno = ret;
199199
return -1;
@@ -206,7 +206,7 @@ STATIC int cc3k_socket_accept(mod_network_socket_obj_t *socket, mod_network_sock
206206
int fd;
207207
sockaddr addr;
208208
socklen_t addr_len = sizeof(addr);
209-
if ((fd = CC3000_EXPORT(accept)(socket->u_state, &addr, &addr_len)) < 0) {
209+
if ((fd = CC3000_EXPORT(accept)(socket->fileno, &addr, &addr_len)) < 0) {
210210
if (fd == SOC_IN_PROGRESS) {
211211
*_errno = MP_EAGAIN;
212212
} else {
@@ -219,7 +219,7 @@ STATIC int cc3k_socket_accept(mod_network_socket_obj_t *socket, mod_network_sock
219219
cc3k_reset_fd_closed_state(fd);
220220

221221
// store state in new socket object
222-
socket2->u_state = fd;
222+
socket2->fileno = fd;
223223

224224
// return ip and port
225225
// it seems CC3000 returns little endian for accept??
@@ -235,7 +235,7 @@ STATIC int cc3k_socket_accept(mod_network_socket_obj_t *socket, mod_network_sock
235235

236236
STATIC int cc3k_socket_connect(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) {
237237
MAKE_SOCKADDR(addr, ip, port)
238-
int ret = CC3000_EXPORT(connect)(socket->u_state, &addr, sizeof(addr));
238+
int ret = CC3000_EXPORT(connect)(socket->fileno, &addr, sizeof(addr));
239239
if (ret != 0) {
240240
*_errno = CC3000_EXPORT(errno);
241241
return -1;
@@ -244,8 +244,8 @@ STATIC int cc3k_socket_connect(mod_network_socket_obj_t *socket, byte *ip, mp_ui
244244
}
245245

246246
STATIC mp_uint_t cc3k_socket_send(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, int *_errno) {
247-
if (cc3k_get_fd_closed_state(socket->u_state)) {
248-
CC3000_EXPORT(closesocket)(socket->u_state);
247+
if (cc3k_get_fd_closed_state(socket->fileno)) {
248+
CC3000_EXPORT(closesocket)(socket->fileno);
249249
*_errno = MP_EPIPE;
250250
return -1;
251251
}
@@ -255,7 +255,7 @@ STATIC mp_uint_t cc3k_socket_send(mod_network_socket_obj_t *socket, const byte *
255255
mp_int_t bytes = 0;
256256
while (bytes < len) {
257257
int n = MIN((len - bytes), MAX_TX_PACKET);
258-
n = CC3000_EXPORT(send)(socket->u_state, (uint8_t *)buf + bytes, n, 0);
258+
n = CC3000_EXPORT(send)(socket->fileno, (uint8_t *)buf + bytes, n, 0);
259259
if (n <= 0) {
260260
*_errno = CC3000_EXPORT(errno);
261261
return -1;
@@ -268,18 +268,18 @@ STATIC mp_uint_t cc3k_socket_send(mod_network_socket_obj_t *socket, const byte *
268268

269269
STATIC mp_uint_t cc3k_socket_recv(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, int *_errno) {
270270
// check the socket is open
271-
if (cc3k_get_fd_closed_state(socket->u_state)) {
271+
if (cc3k_get_fd_closed_state(socket->fileno)) {
272272
// socket is closed, but CC3000 may have some data remaining in buffer, so check
273273
fd_set rfds;
274274
FD_ZERO(&rfds);
275-
FD_SET(socket->u_state, &rfds);
275+
FD_SET(socket->fileno, &rfds);
276276
cc3000_timeval tv;
277277
tv.tv_sec = 0;
278278
tv.tv_usec = 1;
279-
int nfds = CC3000_EXPORT(select)(socket->u_state + 1, &rfds, NULL, NULL, &tv);
280-
if (nfds == -1 || !FD_ISSET(socket->u_state, &rfds)) {
279+
int nfds = CC3000_EXPORT(select)(socket->fileno + 1, &rfds, NULL, NULL, &tv);
280+
if (nfds == -1 || !FD_ISSET(socket->fileno, &rfds)) {
281281
// no data waiting, so close socket and return 0 data
282-
CC3000_EXPORT(closesocket)(socket->u_state);
282+
CC3000_EXPORT(closesocket)(socket->fileno);
283283
return 0;
284284
}
285285
}
@@ -288,7 +288,7 @@ STATIC mp_uint_t cc3k_socket_recv(mod_network_socket_obj_t *socket, byte *buf, m
288288
len = MIN(len, MAX_RX_PACKET);
289289

290290
// do the recv
291-
int ret = CC3000_EXPORT(recv)(socket->u_state, buf, len, 0);
291+
int ret = CC3000_EXPORT(recv)(socket->fileno, buf, len, 0);
292292
if (ret < 0) {
293293
*_errno = CC3000_EXPORT(errno);
294294
return -1;
@@ -299,7 +299,7 @@ STATIC mp_uint_t cc3k_socket_recv(mod_network_socket_obj_t *socket, byte *buf, m
299299

300300
STATIC mp_uint_t cc3k_socket_sendto(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, byte *ip, mp_uint_t port, int *_errno) {
301301
MAKE_SOCKADDR(addr, ip, port)
302-
int ret = CC3000_EXPORT(sendto)(socket->u_state, (byte *)buf, len, 0, (sockaddr *)&addr, sizeof(addr));
302+
int ret = CC3000_EXPORT(sendto)(socket->fileno, (byte *)buf, len, 0, (sockaddr *)&addr, sizeof(addr));
303303
if (ret < 0) {
304304
*_errno = CC3000_EXPORT(errno);
305305
return -1;
@@ -310,7 +310,7 @@ STATIC mp_uint_t cc3k_socket_sendto(mod_network_socket_obj_t *socket, const byte
310310
STATIC mp_uint_t cc3k_socket_recvfrom(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, byte *ip, mp_uint_t *port, int *_errno) {
311311
sockaddr addr;
312312
socklen_t addr_len = sizeof(addr);
313-
mp_int_t ret = CC3000_EXPORT(recvfrom)(socket->u_state, buf, len, 0, &addr, &addr_len);
313+
mp_int_t ret = CC3000_EXPORT(recvfrom)(socket->fileno, buf, len, 0, &addr, &addr_len);
314314
if (ret < 0) {
315315
*_errno = CC3000_EXPORT(errno);
316316
return -1;
@@ -320,7 +320,7 @@ STATIC mp_uint_t cc3k_socket_recvfrom(mod_network_socket_obj_t *socket, byte *bu
320320
}
321321

322322
STATIC int cc3k_socket_setsockopt(mod_network_socket_obj_t *socket, mp_uint_t level, mp_uint_t opt, const void *optval, mp_uint_t optlen, int *_errno) {
323-
int ret = CC3000_EXPORT(setsockopt)(socket->u_state, level, opt, optval, optlen);
323+
int ret = CC3000_EXPORT(setsockopt)(socket->fileno, level, opt, optval, optlen);
324324
if (ret < 0) {
325325
*_errno = CC3000_EXPORT(errno);
326326
return -1;
@@ -340,14 +340,14 @@ STATIC int cc3k_socket_settimeout(mod_network_socket_obj_t *socket, mp_uint_t ti
340340
// set blocking mode
341341
optval = SOCK_OFF;
342342
}
343-
ret = CC3000_EXPORT(setsockopt)(socket->u_state, SOL_SOCKET, SOCKOPT_RECV_NONBLOCK, &optval, optlen);
343+
ret = CC3000_EXPORT(setsockopt)(socket->fileno, SOL_SOCKET, SOCKOPT_RECV_NONBLOCK, &optval, optlen);
344344
if (ret == 0) {
345-
ret = CC3000_EXPORT(setsockopt)(socket->u_state, SOL_SOCKET, SOCKOPT_ACCEPT_NONBLOCK, &optval, optlen);
345+
ret = CC3000_EXPORT(setsockopt)(socket->fileno, SOL_SOCKET, SOCKOPT_ACCEPT_NONBLOCK, &optval, optlen);
346346
}
347347
} else {
348348
// set timeout
349349
socklen_t optlen = sizeof(timeout_ms);
350-
ret = CC3000_EXPORT(setsockopt)(socket->u_state, SOL_SOCKET, SOCKOPT_RECV_TIMEOUT, &timeout_ms, optlen);
350+
ret = CC3000_EXPORT(setsockopt)(socket->fileno, SOL_SOCKET, SOCKOPT_RECV_TIMEOUT, &timeout_ms, optlen);
351351
}
352352

353353
if (ret != 0) {
@@ -363,7 +363,7 @@ STATIC int cc3k_socket_ioctl(mod_network_socket_obj_t *socket, mp_uint_t request
363363
if (request == MP_STREAM_POLL) {
364364
mp_uint_t flags = arg;
365365
ret = 0;
366-
int fd = socket->u_state;
366+
int fd = socket->fileno;
367367

368368
// init fds
369369
fd_set rfds, wfds, xfds;

0 commit comments

Comments
 (0)
0