X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fopenssl.c;h=a1b35b21cdb6f6344fc8c0cac837900a7c284c08;hb=1eb1e76e9ac6f1692f33570f61ff43740f3b44d1;hp=201d24597995bbba66460fe709dcbb5f281dc9c3;hpb=6dca252c60d88e43e0430170e8ae0f3c4cf5d8b7;p=wget diff --git a/src/openssl.c b/src/openssl.c index 201d2459..a1b35b21 100644 --- a/src/openssl.c +++ b/src/openssl.c @@ -186,9 +186,11 @@ ssl_init () case secure_protocol_auto: meth = SSLv23_client_method (); break; +#ifndef OPENSSL_NO_SSL2 case secure_protocol_sslv2: meth = SSLv2_client_method (); break; +#endif case secure_protocol_sslv3: meth = SSLv3_client_method (); break; @@ -261,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; } @@ -287,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); } @@ -300,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