summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/serv.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/serv.c b/src/serv.c
index 42b4887bdc..4fc0759d5f 100644
--- a/src/serv.c
+++ b/src/serv.c
@@ -138,7 +138,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;
+ int close_ok;
time_t start;
);
@@ -156,7 +156,7 @@ static void listener_free(listener_item * j)
free(j->http_request);
free(j->http_response);
if (j->fd >= 0) {
- if (j->no_close == 0)
+ if (j->close_ok)
gnutls_bye(j->tls_session, GNUTLS_SHUT_WR);
shutdown(j->fd, 2);
close(j->fd);
@@ -1263,7 +1263,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;
+ j->close_ok = 0;
} else if (r == 0) {
if (gnutls_session_is_resumed(j->tls_session) != 0 && verbose != 0)
printf("*** This is a resumed session\n");
@@ -1281,14 +1281,16 @@ static void retry_handshake(listener_item *j)
print_info(j->tls_session, verbose, verbose);
}
+ j->close_ok = 1;
j->handshake_ok = 1;
}
}
static void try_rehandshake(listener_item *j)
{
-int r, ret;
+ int r, ret;
fprintf(stderr, "*** Received hello message\n");
+
do {
r = gnutls_handshake(j->tls_session);
} while (r == GNUTLS_E_INTERRUPTED || r == GNUTLS_E_AGAIN);
@@ -1300,6 +1302,7 @@ int r, ret;
fprintf(stderr, "Error in rehandshake: %s\n", gnutls_strerror(r));
j->http_state = HTTP_STATE_CLOSING;
} else {
+ j->close_ok = 1;
j->http_state = HTTP_STATE_REQUEST;
}
}
@@ -1407,7 +1410,6 @@ 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);
@@ -1461,7 +1463,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;
+ j->close_ok = 0;
}
}
} else {