From 9c6fda80088900ef7e797d9d6ffd058b7794455e Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Wed, 22 Jan 2025 16:50:02 -0800 Subject: [PATCH 1/3] Improve error when disabling heartbeat Fixes #1756 * Add test that demonstrates the issue. --- projects/Test/Integration/GH/TestGitHubIssues.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/projects/Test/Integration/GH/TestGitHubIssues.cs b/projects/Test/Integration/GH/TestGitHubIssues.cs index 13f2be7fb..b12e85109 100644 --- a/projects/Test/Integration/GH/TestGitHubIssues.cs +++ b/projects/Test/Integration/GH/TestGitHubIssues.cs @@ -117,5 +117,17 @@ public async Task TestBasicConsumeCancellation_GH1750() Assert.False(sawConnectionShutdown); } + + [Fact] + public async Task TestHeartbeatTimeoutValue_GH1756() + { + var connectionFactory = new ConnectionFactory + { + AutomaticRecoveryEnabled = true, + RequestedHeartbeat = TimeSpan.Zero, + }; + + _conn = await connectionFactory.CreateConnectionAsync("some-name"); + } } } From 276c9a6f7f7fa63700950026f40c11cd66d50c06 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Fri, 24 Jan 2025 07:21:42 -0800 Subject: [PATCH 2/3] Allow setting TimeSpan.Zero as a heartbeat timeout value --- .../RabbitMQ.Client/Impl/SocketFrameHandler.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/projects/RabbitMQ.Client/Impl/SocketFrameHandler.cs b/projects/RabbitMQ.Client/Impl/SocketFrameHandler.cs index b39b95370..4a970f00d 100644 --- a/projects/RabbitMQ.Client/Impl/SocketFrameHandler.cs +++ b/projects/RabbitMQ.Client/Impl/SocketFrameHandler.cs @@ -111,8 +111,11 @@ public TimeSpan ReadTimeout { try { - _socket.ReceiveTimeout = value; - _stream.ReadTimeout = (int)value.TotalMilliseconds; + if (value != default) + { + _socket.ReceiveTimeout = value; + _stream.ReadTimeout = (int)value.TotalMilliseconds; + } } catch (SocketException) { @@ -125,8 +128,11 @@ public TimeSpan WriteTimeout { set { - _socket.Client.SendTimeout = (int)value.TotalMilliseconds; - _stream.WriteTimeout = (int)value.TotalMilliseconds; + if (value != default) + { + _socket.Client.SendTimeout = (int)value.TotalMilliseconds; + _stream.WriteTimeout = (int)value.TotalMilliseconds; + } } } From 2cb90b56c39308a009ed6df51e2136f1f032f825 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Fri, 24 Jan 2025 08:51:06 -0800 Subject: [PATCH 3/3] Add assertion that actual heartbeat timeout has been updated with the server value. --- projects/Test/Integration/GH/TestGitHubIssues.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/Test/Integration/GH/TestGitHubIssues.cs b/projects/Test/Integration/GH/TestGitHubIssues.cs index b12e85109..7f8810fb6 100644 --- a/projects/Test/Integration/GH/TestGitHubIssues.cs +++ b/projects/Test/Integration/GH/TestGitHubIssues.cs @@ -128,6 +128,8 @@ public async Task TestHeartbeatTimeoutValue_GH1756() }; _conn = await connectionFactory.CreateConnectionAsync("some-name"); + + Assert.True(_conn.Heartbeat != default); } } }