diff --git a/Modbus.Net/Modbus.Net/ComConnector.cs b/Modbus.Net/Modbus.Net/ComConnector.cs index 42a9b19..ecc0329 100644 --- a/Modbus.Net/Modbus.Net/ComConnector.cs +++ b/Modbus.Net/Modbus.Net/ComConnector.cs @@ -456,6 +456,7 @@ namespace Modbus.Net catch (Exception err) { Log.Error(err, "Com client {ConnectionToken} send msg error", ConnectionToken); + Dispose(); } RefreshSendCount(); } diff --git a/Modbus.Net/Modbus.Net/TcpConnector.cs b/Modbus.Net/Modbus.Net/TcpConnector.cs index 2787698..f6ee3f7 100644 --- a/Modbus.Net/Modbus.Net/TcpConnector.cs +++ b/Modbus.Net/Modbus.Net/TcpConnector.cs @@ -199,7 +199,7 @@ namespace Modbus.Net catch (Exception err) { Log.Error(err, "Tcp client {ConnectionToken} send exception", ConnectionToken); - CloseClientSocket(); + Dispose(); } } @@ -225,6 +225,7 @@ namespace Modbus.Net { while (!_taskCancel) { + if (_socketClient == null) break; NetworkStream stream = _socketClient.GetStream(); var len = await stream.ReadAsync(_receiveBuffer, 0, _receiveBuffer.Length); stream.Flush(); @@ -298,11 +299,14 @@ namespace Modbus.Net Controller.SendStop(); Controller.Clear(); ReceiveMsgThreadStop(); - if (_socketClient.Connected) + if (_socketClient != null) { - _socketClient?.GetStream().Dispose(); + if (_socketClient.Connected) + { + _socketClient?.GetStream().Dispose(); + } + _socketClient?.Close(); } - _socketClient?.Close(); } catch (Exception ex) { diff --git a/Modbus.Net/Modbus.Net/UdpConnector.cs b/Modbus.Net/Modbus.Net/UdpConnector.cs index 30682af..dae4717 100644 --- a/Modbus.Net/Modbus.Net/UdpConnector.cs +++ b/Modbus.Net/Modbus.Net/UdpConnector.cs @@ -180,7 +180,7 @@ namespace Modbus.Net catch (Exception err) { Log.Error(err, "Udp client {ConnectionToken} send exception", ConnectionToken); - CloseClientSocket(); + Dispose(); } } @@ -206,6 +206,7 @@ namespace Modbus.Net { while (!_taskCancel) { + if (_socketClient == null) break; var receive = await _socketClient.ReceiveAsync(); var len = receive.Buffer.Length; @@ -265,20 +266,19 @@ namespace Modbus.Net Controller.SendStop(); Controller.Clear(); ReceiveMsgThreadStop(); - if (_socketClient.Client.Connected) + if (_socketClient != null) { - _socketClient?.Client.Disconnect(false); + if (_socketClient.Client?.Connected == true) + { + _socketClient.Client.Disconnect(false); + } + _socketClient.Close(); } - _socketClient?.Close(); } catch (Exception ex) { Log.Error(ex, "Udp client {ConnectionToken} client close exception", ConnectionToken); } - finally - { - _socketClient = null; - } } } } \ No newline at end of file