Commit cb2e10f2 authored by Matt Caswell's avatar Matt Caswell
Browse files

Fix intermittent windows failures in TLSProxy tests



When closing down the socket in s_client Windows will close it immediately
even if there is data in the write buffer still waiting to be sent. This
was causing tests to fail in Msys/Mingw builds because TLSProxy doesn't see
the final CloseNotify.

I have experimented with various ways of doing this "properly" (e.g.
shutting down the socket before closing, setting SO_LINGER etc). I can't
seem to find the "magic" formula that will make Windows do this. Inserting
a short 50ms sleep seems to do the trick...but its not very "nice" so I've
inserted a TODO on this item. Perhaps someone else will have better luck
in figuring this out.

RT#4255

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent 75dd6c1a
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2402,6 +2402,16 @@ int s_client_main(int argc, char **argv)
    if (in_init)
        print_stuff(bio_c_out, con, full_log);
    do_ssl_shutdown(con);
#if defined(OPENSSL_SYS_WINDOWS)
    /*
     * Give the socket time to send its last data before we close it.
     * No amount of setting SO_LINGER etc on the socket seems to persuade
     * Windows to send the data before closing the socket...but sleeping
     * for a short time seems to do it (units in ms)
     * TODO: Find a better way to do this
     */
    Sleep(50);
#endif
    BIO_closesocket(SSL_get_fd(con));
 end:
    if (con != NULL) {