Don't wait in select if we have data to write
authorMatt Caswell <matt@openssl.org>
Mon, 23 Oct 2023 17:11:06 +0000 (18:11 +0100)
committerMatt Caswell <matt@openssl.org>
Wed, 25 Oct 2023 08:40:48 +0000 (09:40 +0100)
In s_client, when using quic, if we have data from the user to write then we shouldn't
hang in "select" waiting for something to happen.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22480)

apps/s_client.c

index 5577a9e903866016d74fbdd8d1210ca655623de6..8a7650223cacdc2a6a43553eecbefd74c6261a1a 100644 (file)
@@ -2969,10 +2969,13 @@ int s_client_main(int argc, char **argv)
             } while (!write_ssl
                      && cbuf_len == 0
                      && user_data_has_data(&user_data));
-            if (cbuf_len > 0)
+            if (cbuf_len > 0) {
                 read_tty = 0;
-            else
+                timeout.tv_sec = 0;
+                timeout.tv_usec = 0;
+            } else {
                 read_tty = 1;
+            }
         }
 
         ssl_pending = read_ssl && SSL_has_pending(con);
@@ -3266,6 +3269,7 @@ int s_client_main(int argc, char **argv)
                 ret = 0;
                 goto shut;
             }
+
             if (i > 0 && !user_data_add(&user_data, i)) {
                 ret = 0;
                 goto shut;