[php-src] Issue #15193: MYSQLI_OPT_CONNECT_TIMEOUT and mysql.connect_timeout not working when connecting to a non-responsive server

From: Date: Thu, 01 Aug 2024 09:14:22 +0000
Subject: [php-src] Issue #15193: MYSQLI_OPT_CONNECT_TIMEOUT and mysql.connect_timeout not working when connecting to a non-responsive server
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-247417@lists.php.net to get a copy of this message
Issue: https://github.com/php/php-src/issues/15193 Author: oogFranz ### Description I encountered an issue where the MYSQLI_OPT_CONNECT_TIMEOUT option and the mysql.connect_timeout setting do not work as expected when attempting to connect to a non-responsive server. The connection attempt hangs instead of timing out. In contrast, when attempting to connect to a non-existent server, the connection attempt fails immediately. Steps to Reproduce: 1. Set up a non-responsive server. I made it by python like this: ```python import socket HOST = '0.0.0.0' PORT = 12345 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() print(f"Listening on {HOST}:{PORT}") while True: conn, addr = s.accept() print(f"Connected by {addr}") ``` 2. Use the mysqli extension to connect to this server with the MYSQLI_OPT_CONNECT_TIMEOUT option set. ```php <?php $connect = @mysqli_init(); mysqli_options($connect, MYSQLI_OPT_CONNECT_TIMEOUT, 5); @mysqli_real_connect($connect, 'host.docker.internal', 'user', 'password', null, 12345, "", 0); ``` 3. Observe that the connection attempt does not timeout as expected. Expected Behavior: The connection attempt should timeout after 5 seconds as specified MYSQLI_OPT_CONNECT_TIMEOUT duration and rise an exception. Actual Behavior: The connection attempt hangs without timing out. I used the following PHP. ``` php -v PHP 8.2.21 (cli) (built: Jul 23 2024 06:55:37) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.21, Copyright (c) Zend Technologies ``` The mysqlnd.net_read_timeout and MYSQL_OPT_READ_TIMEOUT options work, but they affect not only the connection handshake but also every query execution, which is not desirable for our use case. ### PHP Version PHP 8.2.21 ### Operating System _No response_

« previous php.bugs (#247417) next »