summaryrefslogtreecommitdiff
path: root/src/serv.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-04-18 12:03:05 +0200
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-04-18 12:03:28 +0200
commit97f76fae1f32299fc49ced52e08c4b8303eb5001 (patch)
tree4b6229bc045b090caa69219a0ad269453a99b528 /src/serv.c
parentf4c6a612aadacae5907ebe5af0b519e482ad876a (diff)
downloadgnutls-97f76fae1f32299fc49ced52e08c4b8303eb5001.tar.gz
gnutls-serv: don't send closure messages in failed handshakes
Diffstat (limited to 'src/serv.c')
-rw-r--r--src/serv.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/serv.c b/src/serv.c
index 365e8b400e..b34254d38e 100644
--- a/src/serv.c
+++ b/src/serv.c
@@ -135,6 +135,7 @@ LIST_TYPE_DECLARE(listener_item, char *http_request; char *http_response;
int listen_socket; int fd;
gnutls_session_t tls_session;
int handshake_ok;
+ int no_close;
time_t start;
);
@@ -152,7 +153,8 @@ static void listener_free(listener_item * j)
free(j->http_request);
free(j->http_response);
if (j->fd >= 0) {
- gnutls_bye(j->tls_session, GNUTLS_SHUT_WR);
+ if (j->no_close == 0)
+ gnutls_bye(j->tls_session, GNUTLS_SHUT_WR);
shutdown(j->fd, 2);
close(j->fd);
gnutls_deinit(j->tls_session);
@@ -1214,6 +1216,7 @@ static void retry_handshake(listener_item *j)
do {
ret = gnutls_alert_send_appropriate(j->tls_session, r);
} while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
+ j->no_close = 1;
} else if (r == 0) {
if (gnutls_session_is_resumed(j->tls_session) != 0 && verbose != 0)
printf("*** This is a resumed session\n");
@@ -1357,6 +1360,7 @@ static void tcp_server(const char *name, int port)
(j->tls_session, accept_fd);
set_read_funcs(j->tls_session);
j->handshake_ok = 0;
+ j->no_close = 0;
if (verbose != 0) {
ctt = ctime(&tt);
@@ -1410,6 +1414,7 @@ static void tcp_server(const char *name, int port)
ret = gnutls_alert_send_appropriate(j->tls_session, r);
} while (ret == GNUTLS_E_AGAIN || ret == GNUTLS_E_INTERRUPTED);
GERR(r);
+ j->no_close = 1;
}
}
} else {