aboutsummaryrefslogtreecommitdiff
path: root/extmod/modlwip.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-10-16 17:34:11 +1100
committerDamien George <damien.p.george@gmail.com>2019-10-31 13:37:51 +1100
commit26d8fd2c0a1385a7c22363ea0695e6a0c828dc8d (patch)
treee218b8e9fc1cb13a035dd21403322375d3739d48 /extmod/modlwip.c
parentfeaa2516742ed4f9032a0233dcec922ac6a4e80c (diff)
extmod/modlwip: Unconditionally return POLLHUP/POLLERR when polling.
POSIX poll should always return POLLERR and POLLHUP in revents, regardless of whether they were requested in the input events flags. See issues #4290 and #5172.
Diffstat (limited to 'extmod/modlwip.c')
-rw-r--r--extmod/modlwip.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index 1e9b8c459..4358544ba 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -1476,13 +1476,14 @@ STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
ret |= flags & (MP_STREAM_POLL_RD | MP_STREAM_POLL_WR);
} 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);
+ ret |= flags & MP_STREAM_POLL_WR;
+ ret |= 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
- ret |= flags & MP_STREAM_POLL_ERR;
+ ret |= MP_STREAM_POLL_ERR;
}
} else if (request == MP_STREAM_CLOSE) {