8000 esp32/modsocket.c: remove MSG_PEEK workaround on select ioctl. · nickzoic/micropython-esp32@e614bf5 · GitHub
[go: up one dir, main page]

< 8000 div class="position-relative header-wrapper js-header-wrapper "> Skip to content

Commit e614bf5

Browse files
committed
esp32/modsocket.c: remove MSG_PEEK workaround on select ioctl.
1 parent 4df414b commit e614bf5

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

esp32/modsocket.c

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -354,35 +354,32 @@ STATIC mp_uint_t socket_stream_write(mp_obj_t self_in, const void *buf, mp_uint_
354354
STATIC mp_uint_t socket_stream_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
355355
socket_obj_t * socket = self_in;
356356
if (request == MP_STREAM_POLL) {
357-
char buf[1];
358-
mp_uint_t ret = 0;
359-
if (arg & MP_STREAM_POLL_RD) {
360-
int r = lwip_recvfrom_r(socket->fd, buf, 1, MSG_DONTWAIT | MSG_PEEK, NULL, NULL);
361-
if (r > 0) ret |= MP_STREAM_POLL_RD;
362-
}
363-
if (arg & (MP_STREAM_POLL_WR | MP_STREAM_POLL_HUP)) {
364-
fd_set wfds; FD_ZERO(&wfds);
365-
fd_set efds; FD_ZERO(&efds);
366-
struct timeval timeout = { .tv_sec = 0, .tv_usec = 0 };
367-
if (arg & MP_STREAM_POLL_WR) FD_SET(socket->fd, &wfds);
368-
if (arg & MP_STREAM_POLL_HUP) FD_SET(socket->fd, &efds);
369-
int r = select((socket->fd)+1, NULL, &wfds, &efds, &timeout);
370-
if (r < 0) {
371-
*errcode = MP_EIO;
372-
return MP_STREAM_ERROR;
373-
}
374-
if (FD_ISSET(socket->fd, &wfds)) ret |= MP_STREAM_POLL_WR;
375-
if (FD_ISSET(socket->fd, &efds)) ret |= MP_STREAM_POLL_HUP;
357+
358+
fd_set rfds; FD_ZERO(&rfds);
359+
fd_set wfds; FD_ZERO(&wfds);
360+
fd_set efds; FD_ZERO(&efds);
361+
struct timeval timeout = { .tv_sec = 0, .tv_usec = 0 };
362+
if (arg & MP_STREAM_POLL_RD) FD_SET(socket->fd, &rfds);
363+
if (arg & MP_STREAM_POLL_WR) FD_SET(socket->fd, &wfds);
364+
if (arg & MP_STREAM_POLL_HUP) FD_SET(socket->fd, &efds);
365+
366+
int r = select((socket->fd)+1, &rfds, &wfds, &efds, &timeout);
367+
if (r < 0) {
368+
*errcode = MP_EIO;
369+
return MP_STREAM_ERROR;
376370
}
371+
372+
mp_uint_t ret = 0;
373+
if (FD_ISSET(socket->fd, &rfds)) ret |= MP_STREAM_POLL_RD;
374+
if (FD_ISSET(socket->fd, &wfds)) ret |= MP_STREAM_POLL_WR;
375+
if (FD_ISSET(socket->fd, &efds)) ret |= MP_STREAM_POLL_HUP;
377376
return ret;
378377
}
379378

380379
*errcode = MP_EINVAL;
381380
return MP_STREAM_ERROR;
382381
}
383382

384-
// XXX TODO missing methods ...
385-
386383
STATIC const mp_map_elem_t socket_locals_dict_table[] = {
387384
{ MP_OBJ_NEW_QSTR(MP_QSTR___del__), (mp_obj_t)&socket_close_obj },
388385
{ MP_OBJ_NEW_QSTR(MP_QSTR_close), (mp_obj_t)&socket_close_obj },

0 commit comments

Comments
 (0)
0