From 366dbedf1b591759bab08e0f3eaf0af07c1936ca Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Tue, 19 Apr 2011 14:40:21 +0200 Subject: [PATCH] gnutls: use the blocking socket. --- src/ChangeLog | 4 ++++ src/gnutls.c | 37 +++++++------------------------------ 2 files changed, 11 insertions(+), 30 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1bbc6acc..0a16c79f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2011-04-19 Giuseppe Scrivano + * gnutls.c: Do not include . + * gnutls.c (wgnutls_peek): Ensure there is data available before attempt + a read on the blocking socket. + * Makefile.am (LIBS): Add $(LIB_CLOCK_GETTIME) * utils.c: Include . Do not include . (touch): Use `futimens' instead of `utimes'. diff --git a/src/gnutls.c b/src/gnutls.c index a1054a4d..1f96d9ac 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -40,7 +40,6 @@ as that of the covered work. */ #include #include -#include #include #include "utils.h" @@ -186,24 +185,13 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg) if (bufsize > offset) { -#ifdef F_GETFL - int flags; - flags = fcntl (fd, F_GETFL, 0); - if (flags < 0) - return ret; - - ret = fcntl (fd, F_SETFL, flags | O_NONBLOCK); - if (ret < 0) - return ret; -#else - /* XXX: Assume it was blocking before. */ - const int one = 1; - ret = ioctl (fd, FIONBIO, &one); - if (ret < 0) - return ret; -#endif - read = gnutls_record_recv (ctx->session, buf + offset, - bufsize - offset); + if (gnutls_record_check_pending (ctx->session) <= 0 + && select_fd (fd, 0.0, WAIT_FOR_READ) <= 0) + read = 0; + else + read = gnutls_record_recv (ctx->session, buf + offset, + bufsize - offset); + if (read < 0) { if (offset) @@ -218,17 +206,6 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg) read); ctx->peeklen += read; } - -#ifdef F_GETFL - ret = fcntl (fd, F_SETFL, flags); - if (ret < 0) - return ret; -#else - const int zero = 0; - ret = ioctl (fd, FIONBIO, &zero); - if (ret < 0) - return ret; -#endif } return offset + read;