Skip to content
Snippets Groups Projects
Commit 5db55e63 authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

extmod/modlwip: ioctl POLL: Fix handling of peer closed socket.

Peer-closed socket is both readable and writable: read will return EOF,
write - error. Without this poll will hang on such socket.

Note that we don't return POLLHUP, based on argumentation in
http://www.greenend.org.uk/rjk/tech/poll.html that it should apply to
deeper disconnects, for example for networking, that would be link layer
disconnect (e.g. WiFi went down).
parent c41fe70e
No related branches found
No related tags found
No related merge requests found
......@@ -1143,8 +1143,11 @@ STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
ret |= MP_STREAM_POLL_WR;
}
if (flags & MP_STREAM_POLL_HUP && socket->state == STATE_PEER_CLOSED) {
ret |= MP_STREAM_POLL_HUP;
if (socket->state == STATE_PEER_CLOSED) {
// Peer-closed socket is both readable and writable: read will
// return EOF, write - error. Without this poll will hang on a
// socket which was closed by peer.
ret |= flags & (MP_STREAM_POLL_RD | MP_STREAM_POLL_WR);
}
} else {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment