diff --git a/examples/client/client.c b/examples/client/client.c index 3fc2b715a..8a242f86b 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -4059,17 +4059,22 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) } #endif - if (dtlsUDP == 0) { /* don't send alert after "break" command */ - ret = wolfSSL_shutdown(ssl); - if (wc_shutdown && ret == WOLFSSL_SHUTDOWN_NOT_DONE) { - if (tcp_select(sockfd, DEFAULT_TIMEOUT_SEC) == TEST_RECV_READY) { - ret = wolfSSL_shutdown(ssl); /* bidirectional shutdown */ - if (ret == WOLFSSL_SUCCESS) - printf("Bidirectional shutdown complete\n"); + ret = wolfSSL_shutdown(ssl); + if (wc_shutdown && ret == WOLFSSL_SHUTDOWN_NOT_DONE) { + while (tcp_select(wolfSSL_get_fd(ssl), DEFAULT_TIMEOUT_SEC) == + TEST_RECV_READY) { + ret = wolfSSL_shutdown(ssl); /* bidirectional shutdown */ + if (ret == WOLFSSL_SUCCESS) { + printf("Bidirectional shutdown complete\n"); + break; } - if (ret != WOLFSSL_SUCCESS) + else if (ret != WOLFSSL_SHUTDOWN_NOT_DONE) { printf("Bidirectional shutdown failed\n"); + break; + } } + if (ret != WOLFSSL_SUCCESS) + printf("Bidirectional shutdown failed\n"); } #if defined(ATOMIC_USER) && !defined(WOLFSSL_AEAD_ONLY) if (atomicUser) diff --git a/examples/server/server.c b/examples/server/server.c index 9536ce6e4..fb82b03dd 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -3356,9 +3356,20 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) ret = SSL_shutdown(ssl); if (wc_shutdown && ret == WOLFSSL_SHUTDOWN_NOT_DONE) { - ret = SSL_shutdown(ssl); /* bidirectional shutdown */ - if (ret == WOLFSSL_SUCCESS) - printf("Bidirectional shutdown complete\n"); + while (tcp_select(wolfSSL_get_fd(ssl), DEFAULT_TIMEOUT_SEC) == + TEST_RECV_READY) { + ret = wolfSSL_shutdown(ssl); /* bidirectional shutdown */ + if (ret == WOLFSSL_SUCCESS) { + printf("Bidirectional shutdown complete\n"); + break; + } + else if (ret != WOLFSSL_SHUTDOWN_NOT_DONE) { + printf("Bidirectional shutdown failed\n"); + break; + } + } + if (ret != WOLFSSL_SUCCESS) + printf("Bidirectional shutdown failed\n"); } /* display collected statistics */