diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-02-21 19:19:11 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2012-02-21 19:19:11 +0100 |
commit | ee43d094d2ff204a6ef36542f4b6be46a2ed4e81 (patch) | |
tree | da757b02ca01d2576da7bcac044a449f8ba1b7e0 | |
parent | 177755f804c0a1fa3efcebe1504e95aab786e814 (diff) | |
download | gnutls-ee43d094d2ff204a6ef36542f4b6be46a2ed4e81.tar.gz |
check errno in pull_timeout_func.
-rw-r--r-- | lib/gnutls_buffers.c | 12 |
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) |