]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
check errno in pull_timeout_func.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 21 Feb 2012 18:19:11 +0000 (19:19 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 21 Feb 2012 18:19:11 +0000 (19:19 +0100)
lib/gnutls_buffers.c

index 83a42326703ab3a4faa00e1ae052f6ec27d70524..eee4dc3af76771af6b8ef116d669f82360b83b79 100644 (file)
@@ -618,14 +618,22 @@ int
 _gnutls_io_check_recv (gnutls_session_t session, unsigned int ms)
 {
   gnutls_transport_ptr_t fd = session->internals.transport_send_ptr;
-  int ret = 0;
+  int ret = 0, err;
   
   if (session->internals.pull_timeout_func == system_recv_timeout && 
     session->internals.pull_func != system_read)
     return gnutls_assert_val(GNUTLS_E_PULL_ERROR);
 
+  reset_errno (session);
+
   ret = session->internals.pull_timeout_func(fd, ms);
-  if (ret == -1)
+
+  err = get_errno (session);
+  if (ret == -1 && err == EINTR)
+    return GNUTLS_E_INTERRUPTED;
+  else if (ret == -1 && err == EAGAIN)
+    return GNUTLS_E_AGAIN;
+  else if (ret == -1)
     return gnutls_assert_val(GNUTLS_E_PULL_ERROR);
   
   if (ret > 0)