]> sjero.net Git - wget/blobdiff - src/gnutls.c
Use correctly FIONBIO values.
[wget] / src / gnutls.c
index 1d6316298a6af8fff815ff5aeaa17f9acebef8d6..a1054a4d89c9804dd3f31b794e22924c2b7a022b 100644 (file)
@@ -67,6 +67,8 @@ ssl_init ()
 
   gnutls_global_init ();
   gnutls_certificate_allocate_credentials (&credentials);
+  gnutls_certificate_set_verify_flags(credentials,
+                                      GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
 
   ca_directory = opt.ca_directory ? opt.ca_directory : "/etc/ssl/certs";
 
@@ -141,7 +143,7 @@ wgnutls_read (int fd, char *buf, int bufsize, void *arg)
 
   do
     ret = gnutls_record_recv (ctx->session, buf, bufsize);
-  while (ret == GNUTLS_E_INTERRUPTED);
+  while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
 
   if (ret < 0)
     ctx->last_error = ret;
@@ -156,7 +158,7 @@ wgnutls_write (int fd, char *buf, int bufsize, void *arg)
   struct wgnutls_transport_context *ctx = arg;
   do
     ret = gnutls_record_send (ctx->session, buf, bufsize);
-  while (ret == GNUTLS_E_INTERRUPTED);
+  while (ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
   if (ret < 0)
     ctx->last_error = ret;
   return ret;
@@ -195,20 +197,13 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
         return ret;
 #else
       /* XXX: Assume it was blocking before.  */
-      const int zero = 0;
-      ret = ioctl (fd, FIONBIO, &zero);
+      const int one = 1;
+      ret = ioctl (fd, FIONBIO, &one);
       if (ret < 0)
         return ret;
 #endif
-      do
-        {
-          ret = gnutls_record_recv (ctx->session, buf + offset,
-                                     bufsize - offset);
-        }
-      while (ret == GNUTLS_E_INTERRUPTED);
-
-      read = ret;
-
+      read = gnutls_record_recv (ctx->session, buf + offset,
+                                 bufsize - offset);
       if (read < 0)
         {
           if (offset)
@@ -229,8 +224,8 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg)
       if (ret < 0)
         return ret;
 #else
-      const int one = 1;
-      ret = ioctl (fd, FIONBIO, &one);
+      const int zero = 0;
+      ret = ioctl (fd, FIONBIO, &zero);
       if (ret < 0)
         return ret;
 #endif