aboutsummaryrefslogtreecommitdiff
path: root/src/wsocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/wsocket.c')
-rw-r--r--src/wsocket.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/wsocket.c b/src/wsocket.c
index 65f76bc..d34724b 100644
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -250,7 +250,11 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm
250 } 250 }
251 if (taken == 0) return IO_CLOSED; 251 if (taken == 0) return IO_CLOSED;
252 err = WSAGetLastError(); 252 err = WSAGetLastError();
253 if (err != WSAEWOULDBLOCK) return err; 253 /* On Windows, and on UDP, a connreset simply means the
254 * previous send failed. On TCP, it means our socket
255 * is now useless, so the error must pass. I am
256 * hoping waitfd will still get the error. */
257 if (err != WSAEWOULDBLOCK && err != WSAECONNRESET) return err;
254 if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err; 258 if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
255 } 259 }
256} 260}
@@ -271,7 +275,11 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
271 } 275 }
272 if (taken == 0) return IO_CLOSED; 276 if (taken == 0) return IO_CLOSED;
273 err = WSAGetLastError(); 277 err = WSAGetLastError();
274 if (err != WSAEWOULDBLOCK) return err; 278 /* On Windows, and on UDP, a connreset simply means the
279 * previous send failed. On TCP, it means our socket
280 * is now useless, so the error must pass. I am
281 * hoping waitfd will still get the error. */
282 if (err != WSAEWOULDBLOCK && err != WSAECONNRESET) return err;
275 if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err; 283 if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
276 } 284 }
277} 285}