summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-21 19:19:11 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2012-02-21 19:19:11 +0100
commitee43d094d2ff204a6ef36542f4b6be46a2ed4e81 (patch)
treeda757b02ca01d2576da7bcac044a449f8ba1b7e0
parent177755f804c0a1fa3efcebe1504e95aab786e814 (diff)
downloadgnutls-ee43d094d2ff204a6ef36542f4b6be46a2ed4e81.tar.gz
check errno in pull_timeout_func.
-rw-r--r--lib/gnutls_buffers.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/gnutls_buffers.c b/lib/gnutls_buffers.c
index 83a4232670..eee4dc3af7 100644
--- a/lib/gnutls_buffers.c
+++ b/lib/gnutls_buffers.c
@@ -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)