diff options
author | Damien George <damien.p.george@gmail.com> | 2019-10-16 17:24:40 +1100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2019-10-31 12:54:37 +1100 |
commit | feaa2516742ed4f9032a0233dcec922ac6a4e80c (patch) | |
tree | a463aa178413edef560db27a5541abd3697ee760 | |
parent | d3c383de79bd25b42339cc7a4c68b79e39eccc7c (diff) | |
download | micropython-feaa2516742ed4f9032a0233dcec922ac6a4e80c.tar.gz micropython-feaa2516742ed4f9032a0233dcec922ac6a4e80c.zip |
extmod/modlwip: Make socket poll return POLLNVAL in case of bad file.
-rw-r--r-- | extmod/modlwip.c | 2 | ||||
-rw-r--r-- | tests/extmod/uselect_poll_basic.py | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c index cd0f6946cd..1e9b8c4590 100644 --- a/extmod/modlwip.c +++ b/extmod/modlwip.c @@ -1477,6 +1477,8 @@ STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_ } else if (socket->state == ERR_RST) { // Socket was reset by peer, a write will return an error ret |= flags & (MP_STREAM_POLL_WR | MP_STREAM_POLL_HUP); + } else if (socket->state == _ERR_BADF) { + ret |= MP_STREAM_POLL_NVAL; } else if (socket->state < 0) { // Socket in some other error state, use catch-all ERR flag // TODO: may need to set other return flags here diff --git a/tests/extmod/uselect_poll_basic.py b/tests/extmod/uselect_poll_basic.py index df52471ac3..82a7195c03 100644 --- a/tests/extmod/uselect_poll_basic.py +++ b/tests/extmod/uselect_poll_basic.py @@ -33,3 +33,9 @@ try: poller.modify(s, select.POLLIN) except OSError as e: assert e.args[0] == errno.ENOENT + +# poll after closing the socket, should return POLLNVAL +poller.register(s) +s.close() +p = poller.poll(0) +print(len(p), p[0][-1]) |