File httpfs-EAGAIN of Package httpfs

# HG changeset patch
# User porton
# Date 1653940178 -10800
#      Mon May 30 22:49:38 2022 +0300
# Node ID 068c0fd6d16b7339a05e43231fb5166d825e781a
# Parent  4016a53779eb0241525bbc4ea44838fe324c252d
Handle EAGAIN in server communication.

diff -r 4016a53779eb -r 068c0fd6d16b httpfs2.c
--- a/httpfs2.c	Wed Aug 10 16:50:34 2016 +0200
+++ b/httpfs2.c	Mon May 30 22:49:38 2022 +0300
@@ -1210,12 +1210,15 @@
     if (url->proto == PROTO_HTTPS) {
         do {
             res = gnutls_record_recv(url->ss, buf, len);
-        } while ((res < 0) && handle_ssl_error(url, &res, "read"));
+        } while (res == GNUTLS_E_AGAIN || ((res < 0) && handle_ssl_error(url, &res, "read")));
         if (res <= 0) ssl_error(res, url, "read");
     } else
 #endif
     {
-        res = read(url->sockfd, buf, len);
+        do {
+            errno = 0;
+            res = read(url->sockfd, buf, len);
+        } while(errno == EAGAIN);
         if (res <= 0) errno_report("read");
     }
     return res;
@@ -1233,12 +1236,15 @@
         if (url->proto == PROTO_HTTPS) {
             do {
                 res = gnutls_record_send(url->ss, buf, len);
-            } while ((res < 0) && handle_ssl_error(url, &res, "write"));
+            } while (res == GNUTLS_E_AGAIN || ((res < 0) && handle_ssl_error(url, &res, "write")));
             if (res <= 0) ssl_error(res, url, "write");
         } else
 #endif
         {
-            res = write(url->sockfd, buf, len);
+            do {
+                errno = 0;
+                res = write(url->sockfd, buf, len);
+            } while(errno == EAGAIN);
             if (res <= 0) errno_report("write");
         }
         if ( !(res <= 0) || (url->sock_type != SOCK_KEEPALIVE )) return res;
openSUSE Build Service is sponsored by