X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fopenssl.c;h=a1b35b21cdb6f6344fc8c0cac837900a7c284c08;hb=1eb1e76e9ac6f1692f33570f61ff43740f3b44d1;hp=78fb5d85c6761ecc08b30195223421165050cf81;hpb=cbe8eb725b7cd4e78d8c2fe2d41aadd802308537;p=wget diff --git a/src/openssl.c b/src/openssl.c index 78fb5d85..a1b35b21 100644 --- a/src/openssl.c +++ b/src/openssl.c @@ -263,9 +263,8 @@ openssl_read (int fd, char *buf, int bufsize, void *arg) do ret = SSL_read (conn, buf, bufsize); while (ret == -1 - && (SSL_get_error (conn, ret) == SSL_ERROR_WANT_READ || (SSL_get_error (conn, ret) == SSL_ERROR_SYSCALL - && errno == EINTR))); + && errno == EINTR)); return ret; } @@ -289,10 +288,10 @@ openssl_poll (int fd, double timeout, int wait_for, void *arg) { struct openssl_transport_context *ctx = arg; SSL *conn = ctx->conn; - if (timeout == 0) - return 1; if (SSL_pending (conn)) return 1; + if (timeout == 0) + return 1; return select_fd (fd, timeout, wait_for); } @@ -302,6 +301,8 @@ openssl_peek (int fd, char *buf, int bufsize, void *arg) int ret; struct openssl_transport_context *ctx = arg; SSL *conn = ctx->conn; + if (! openssl_poll (fd, 0.0, WAIT_FOR_READ, arg)) + return 0; do ret = SSL_peek (conn, buf, bufsize); while (ret == -1