From 2fea1e49bdf3ebbf111f3bd34ccd57e45a11c1c1 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Fri, 29 Jan 2021 14:48:35 +0000 Subject: [PATCH] bsd: POLLHUP always bound to POLLIN On OSX, POLLHUP is always |POLLIN, even if you did not wait on POLLIN. This causes a loop because we don't want to ack the POLLHUP until we cleared any pollin (but there is no pending POLLIN...) --- lib/roles/h1/ops-h1.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/roles/h1/ops-h1.c b/lib/roles/h1/ops-h1.c index 157a89d37..ebe340817 100644 --- a/lib/roles/h1/ops-h1.c +++ b/lib/roles/h1/ops-h1.c @@ -729,6 +729,10 @@ rops_handle_POLLIN_h1(struct lws_context_per_thread *pt, struct lws *wsi, return LWS_HPI_RET_WSI_ALREADY_DIED; #endif + if (lwsi_state(wsi) == LRS_WAITING_CONNECT && + (pollfd->revents & LWS_POLLHUP)) + return LWS_HPI_RET_PLEASE_CLOSE_ME; + return LWS_HPI_RET_HANDLED; }