From: Nikos Mavrogiannopoulos Date: Tue, 21 Feb 2012 18:19:11 +0000 (+0100) Subject: check errno in pull_timeout_func. X-Git-Tag: gnutls_3_0_14~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee43d094d2ff204a6ef36542f4b6be46a2ed4e81;p=thirdparty%2Fgnutls.git check errno in pull_timeout_func. --- 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)