/* Close TLS sessions if necessary. Use GNUTLS_SHUT_RDWR so the data is
* reliable transmitted. */
if (server_session_started) {
- gnutls_bye(server_session, GNUTLS_SHUT_RDWR);
+ /* Recent gnutls-serv (used in the test-suite) won't terminate the
+ * connection when gnutls_bye(session, GNUTLS_SHUT_RDWR) is used
+ * before any other data was received. If the validation failed just
+ * close the connection without waiting for data, we won't read it
+ * anyway.
+ *
+ * For verified connections GNUTLS_SHUT_RDWR is important or we might
+ * lose data. */
+ gnutls_bye(server_session, validation_failed ? GNUTLS_SHUT_WR
+ : GNUTLS_SHUT_RDWR);
}
if (client_session_started) {
gnutls_bye(client_session, GNUTLS_SHUT_RDWR);
gnutls_x509_crt_deinit(cert);
+ /* Send a bogus request to the server. Otherwise recent gnutls-serv won't
+ * terminate the connection when gnutls_bye() is used. */
+ gnutls_record_send(session, "GET / HTTP/1.0\r\n\r\n",
+ strlen("GET / HTTP/1.0\r\n\r\n"));
+
gnutls_bye(session, GNUTLS_SHUT_RDWR);
fclose(fd_read);
fclose(fd_write);