]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
test556: improve robustness
authorStefan Eissing <stefan@eissing.org>
Thu, 8 Aug 2024 11:23:32 +0000 (13:23 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 9 Aug 2024 07:38:19 +0000 (09:38 +0200)
Fix handling of partial/blocked sends.

Fixes test with CURL_DBG_SOCK_WBLOCK=90 set.

Closes #14453

tests/libtest/lib556.c

index 5e5c54ed3486e4fe87083abc3f9c1b1b68698c87..06532c6161d9c761fc15d9a806630320b63d9090 100644 (file)
@@ -65,28 +65,35 @@ CURLcode test(char *URL)
     const char *request =
       "GET /556 HTTP/1.1\r\n"
       "Host: ninja\r\n\r\n";
-    size_t iolen = 0;
-
-    res = curl_easy_send(curl, request, strlen(request), &iolen);
-
-    if(!res) {
-      /* we assume that sending always work */
+    const char *sbuf = request;
+    size_t sblen = strlen(request);
+    size_t nwritten = 0, nread = 0;
+
+    do {
+      char buf[1024];
+
+      if(sblen) {
+        res = curl_easy_send(curl, sbuf, sblen, &nwritten);
+        if(res && res != CURLE_AGAIN)
+          break;
+        if(nwritten > 0) {
+          sbuf += nwritten;
+          sblen -= nwritten;
+        }
+      }
 
-      do {
-        char buf[1024];
-        /* busy-read like crazy */
-        res = curl_easy_recv(curl, buf, sizeof(buf), &iolen);
+      /* busy-read like crazy */
+      res = curl_easy_recv(curl, buf, sizeof(buf), &nread);
 
-        if(iolen) {
-          /* send received stuff to stdout */
-          if(!write(STDOUT_FILENO, buf, iolen))
-            break;
-        }
+      if(nread) {
+        /* send received stuff to stdout */
+        if(!write(STDOUT_FILENO, buf, nread))
+          break;
+      }
 
-      } while((res == CURLE_OK && iolen) || (res == CURLE_AGAIN));
-    }
+    } while((res == CURLE_OK && nread) || (res == CURLE_AGAIN));
 
-    if(iolen)
+    if(res && res != CURLE_AGAIN)
       res = TEST_ERR_FAILURE;
   }