]> granicus.if.org Git - curl/commitdiff
sws: retry send() on EWOULDBLOCK
authorDaniel Stenberg <daniel@haxx.se>
Sun, 8 Jan 2017 16:50:07 +0000 (17:50 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 9 Jan 2017 22:43:15 +0000 (23:43 +0100)
Fixes spurious test 1060 and 1061 failures on OpenBSD, Solaris and more.

Bug: https://curl.haxx.se/mail/lib-2017-01/0009.html
Reported-by: Christian Weisgerber
tests/server/sws.c

index c4125a0a8101e25145436ec2b52edbf1fdf2a1ce..63e9fdf5cf180ff5ce602fb65f285ac43b8bf974 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -1200,14 +1200,21 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     size_t num = count;
     if(num > 200)
       num = 200;
+
+    retry:
     written = swrite(sock, buffer, num);
     if(written < 0) {
+      if((EWOULDBLOCK == errno) || (EAGAIN == errno)) {
+        wait_ms(10);
+        goto retry;
+      }
       sendfailure = TRUE;
       break;
     }
     else {
       logmsg("Sent off %zd bytes", written);
     }
+
     /* write to file as well */
     fwrite(buffer, 1, (size_t)written, dump);