X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fgnutls.c;h=db9241678c45bf58d7662028112d9fe0526fe1a0;hp=564170fec4213e30878e9c51d176e146349a7be5;hb=ee6021a3b09fd65b7fa08a14dd37bd5010219d42;hpb=c09d62159b21b117069e2bdf38b7d10a82c1eff5 diff --git a/src/gnutls.c b/src/gnutls.c index 564170fe..db924167 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" @@ -175,7 +174,7 @@ wgnutls_poll (int fd, double timeout, int wait_for, void *arg) static int wgnutls_peek (int fd, char *buf, int bufsize, void *arg) { - int ret = 0, read = 0; + int read = 0; struct wgnutls_transport_context *ctx = arg; int offset = MIN (bufsize, ctx->peeklen); if (bufsize > sizeof ctx->peekbuf) @@ -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 zero = 0; - ret = ioctl (fd, FIONBIO, &zero); - 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 one = 1; - ret = ioctl (fd, FIONBIO, &one); - if (ret < 0) - return ret; -#endif } return offset + read;