From 1eae1ad96bc78437e9baf540949231d7958bbedd Mon Sep 17 00:00:00 2001 From: Jim Hague Date: Wed, 4 Oct 2017 17:42:06 +0100 Subject: [PATCH] Fix problem where Stubby stops listening to UDP on Win10. Winsock can return ECONNRESET when receiving UDP via recvfrom() if an ICMP Port Unreachable has been received. Rather than treat the socket as being in error and closing it, just ignore the error. --- src/server.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/server.c b/src/server.c index 68b6d09d..319991da 100644 --- a/src/server.c +++ b/src/server.c @@ -544,6 +544,14 @@ static void udp_read_cb(void *userarg) conn->addrlen = sizeof(conn->remote_in); if ((len = recvfrom(l->fd, (void *)buf, sizeof(buf), 0, (struct sockaddr *)&conn->remote_in, &conn->addrlen)) == -1) { + if (_getdns_socketerror() == _getdns_ECONNRESET) { + /* + * WINSOCK gives ECONNRESET on ICMP Port Unreachable + * being received. Ignore it. + * */ + GETDNS_FREE(*mf, conn); + return; + } /* IO error, cleanup this listener. */ loop->vmt->clear(loop, &l->event); _getdns_closesocket(l->fd);