From: Azat Khuzhin Date: Wed, 4 Nov 2020 21:57:39 +0000 (+0300) Subject: Do not try to do SSL handshake if the connect() fails X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=59e31c9667075ae960d59e0f78d8d9c6eb01765f;p=libevent Do not try to do SSL handshake if the connect() fails This will avoid this icky error: $ https-client -4 -url https://127.1 some request failed - no idea which one though! error:00000005:lib(0):func(0):DH lib And instead will report only: $ https-client -4 -url https://127.1 some request failed - no idea which one though! socket error = Connection refused (111) Refs: #1115 --- diff --git a/bufferevent_ssl.c b/bufferevent_ssl.c index b34af9af..a946c162 100644 --- a/bufferevent_ssl.c +++ b/bufferevent_ssl.c @@ -739,8 +739,13 @@ be_ssl_handshakeeventcb(evutil_socket_t fd, short what, void *ptr) bufferevent_incref_and_lock_(&bev_ssl->bev.bev); if (what & EV_TIMEOUT) { bufferevent_run_eventcb_(&bev_ssl->bev.bev, BEV_EVENT_TIMEOUT, 0); - } else - do_handshake(bev_ssl);/* XXX handle failure */ + } else { + int c = evutil_socket_finished_connecting_(fd); + if (c < 0) + bufferevent_run_eventcb_(&bev_ssl->bev.bev, BEV_EVENT_ERROR, 0); + else + do_handshake(bev_ssl);/* XXX handle failure */ + } bufferevent_decref_and_unlock_(&bev_ssl->bev.bev); } diff --git a/util-internal.h b/util-internal.h index 9010b2e3..dabb6d6b 100644 --- a/util-internal.h +++ b/util-internal.h @@ -300,6 +300,7 @@ int evutil_read_file_(const char *filename, char **content_out, size_t *len_out, EVENT2_EXPORT_SYMBOL int evutil_socket_connect_(evutil_socket_t *fd_ptr, const struct sockaddr *sa, int socklen); +EVENT2_EXPORT_SYMBOL int evutil_socket_finished_connecting_(evutil_socket_t fd); #ifdef EVENT__HAVE_AFUNIX_H