From 03761fc84cd05dd1712eb6c9f01ec4dff6723518 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 27 Mar 2019 01:13:58 +0100 Subject: [PATCH] Handle WSAECONNRESET to avoid stopping the supernode on Windows --- edge_utils.c | 10 +++++++++- sn.c | 9 ++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/edge_utils.c b/edge_utils.c index 48e1e8b..4d6f8f4 100644 --- a/edge_utils.c +++ b/edge_utils.c @@ -1311,7 +1311,15 @@ static void readFromIPSocket(n2n_edge_t * eee, int in_sock) { (struct sockaddr *)&sender_sock, (socklen_t*)&i); if(recvlen < 0) { - traceEvent(TRACE_ERROR, "recvfrom failed with %s", strerror(errno)); +#ifdef WIN32 + if(WSAGetLastError() != WSAECONNRESET) +#endif + { + traceEvent(TRACE_ERROR, "recvfrom() failed %d errno %d (%s)", recvlen, errno, strerror(errno)); +#ifdef WIN32 + traceEvent(TRACE_ERROR, "WSAGetLastError(): %u", WSAGetLastError()); +#endif + } return; /* failed to receive data from UDP */ } diff --git a/sn.c b/sn.c index 63b54d2..b6855eb 100644 --- a/sn.c +++ b/sn.c @@ -968,10 +968,17 @@ static int run_loop(n2n_sn_t * sss) { bread = recvfrom(sss->sock, pktbuf, N2N_SN_PKTBUF_SIZE, 0/*flags*/, (struct sockaddr *)&sender_sock, (socklen_t*)&i); - if(bread < 0) { + if((bread < 0) +#ifdef WIN32 + && (WSAGetLastError() != WSAECONNRESET) +#endif + ) { /* For UDP bread of zero just means no data (unlike TCP). */ /* The fd is no good now. Maybe we lost our interface. */ traceEvent(TRACE_ERROR, "recvfrom() failed %d errno %d (%s)", bread, errno, strerror(errno)); +#ifdef WIN32 + traceEvent(TRACE_ERROR, "WSAGetLastError(): %u", WSAGetLastError()); +#endif keep_running=0; break; }