Bug #107600 mysql connection time out expired changed to system.timeoutexception
Submitted: 20 Jun 2022 6:49 Modified: 16 Aug 2022 14:36
Reporter: mohamed atef Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / NET Severity:S3 (Non-critical)
Version:8.0.29 OS:Windows
Assigned to: CPU Architecture:Any
Tags: mysql connection time out expired changed to system.timeoutexception

[20 Jun 2022 6:49] mohamed atef
Description:
when connectiong to mysql server and connection time out is expired
connector return system.timeout exception instead of mysqlexception

How to repeat:
create c# project and add net connector net 8.0.29 from nuget
  private string MyConStr(uint t)
        {
            MySqlConnectionStringBuilder cons = new MySqlConnectionStringBuilder()
            {
                Server = "127.0.0.1",
                Port = 330,
                UserID = "root",
                Password = "yousef",
                Database = "abc",
                SslMode = MySqlSslMode.Disabled,
                ConvertZeroDateTime = true,
                AllowUserVariables = true,
                ConnectionTimeout = t,
                DefaultCommandTimeout = t
            };
            return cons.ToString();
        }
        private void button1_Click(object sender, EventArgs e)
        {
// this Method will throw system.timeoutexception
            int ExNumber = CheckConnection2(out string ExMessage);
            if (ExNumber >= 0)
            {
                MessageBox.Show(ExMessage);
            }
        }
       
       
        private int CheckConnection2(out string ExMessage)
        {
            try
            {
                string constr = MyConStr(1);
                using (MySqlConnection Con = new MySqlConnection(constr))
                {
                    Con.Open();
                    if (Con.State == ConnectionState.Open)
                    {
                        Con.Close();
                    }
                }
                ExMessage = string.Empty;
                return 0;
            }
            catch (MySqlException EX)
            {
                ExMessage = EX.Message;
                return EX.Number;
            }
        }

exception 

System.TimeoutException: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at MySql.Data.Common.StreamCreator.GetTcpStream(MySqlConnectionStringBuilder settings, MyNetworkStream& networkStream)
   at MySql.Data.Common.StreamCreator.GetStream(MySqlConnectionStringBuilder settings, MyNetworkStream& networkStream)
   at MySql.Data.MySqlClient.NativeDriver.Open()
   at MySql.Data.MySqlClient.Driver.Open()
   at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
   at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
   at MySql.Data.MySqlClient.MySqlPool.GetConnection()
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at MysqlConnectionTimeBug.Form1.CheckConnection2(String& ExMessage) in E:\MysqlConnectionTimeBug\MysqlConnectionTimeBug\Form1.cs:line 85
   at MysqlConnectionTimeBug.Form1.button1_Click(Object sender, EventArgs e) in E:\MysqlConnectionTimeBug\MysqlConnectionTimeBug\Form1.cs:line 39
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Loaded Assemblies **************
mscorlib
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4515.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
MysqlConnectionTimeBug
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///E:/MysqlConnectionTimeBug/MysqlConnectionTimeBug/bin/Debug/MysqlConnectionTimeBug.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4515.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4488.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4390.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4190.0 built by: NET48REL1LAST_B
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Core
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4515.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Xml
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
MySql.Data
    Assembly Version: 8.0.29.0
    Win32 Version: 8.0.29.0
    CodeBase: file:///E:/MysqlConnectionTimeBug/MysqlConnectionTimeBug/bin/Debug/MySql.Data.DLL
----------------------------------------
System.Data
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4455.0 built by: NET48REL1LAST_C
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Transactions
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
    Assembly Version: 4.0.0.0
    Win32 Version: 4.8.4084.0 built by: NET48REL1
    CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Suggested fix:
i don`t know
[20 Jun 2022 6:52] mohamed atef
Windows not MAC
[20 Jun 2022 9:53] MySQL Verification Team
Hello Mohamed,

Thank you for the report and feedback.
Verified as described.

thanks,
Umesh
[16 Aug 2022 14:36] Christine Cole
Posted by developer:
 
Fixed as of the upcoming MySQL Connector/NET 8.0.31 release, and here's the proposed changelog entry from the documentation team:

After a connection timeout expired, exception type TimeoutException was
thrown when MySqlException was expected.

Thank you for the bug report.