X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fgnutls.c;h=4f38aca1d9c43ed302159d3ecf29c0e8f44fe29b;hp=9e5c733b4c90c536ac46e4b6e3dfe0d5180220f0;hb=ca244196f1c7347f89e4b382198177a48b44133c;hpb=28db25933b05b46085eef597c2ce7fba8894840e diff --git a/src/gnutls.c b/src/gnutls.c index 9e5c733b..4f38aca1 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -40,6 +40,7 @@ as that of the covered work. */ #include #include +#include #include "utils.h" #include "connect.h" @@ -182,6 +183,15 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg) if (bufsize > offset) { + 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; + do { ret = gnutls_record_recv (ctx->session, buf + offset, @@ -203,6 +213,10 @@ wgnutls_peek (int fd, char *buf, int bufsize, void *arg) ret); ctx->peeklen += ret; } + + fcntl (fd, F_SETFL, flags); + if (ret < 0) + return ret; } return offset + ret;