/* 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);