From ddbdec84734465ab74894fa74b0b00b968e8df00 Mon Sep 17 00:00:00 2001 From: Marcos Pereira Date: Thu, 18 Feb 2016 19:02:16 +0000 Subject: [PATCH] Handlers removed to avoid: An exception of type 'System.Net.Sockets.SocketException' occurred in S7.Net.Core.dll but was not handled in user code. Additional information: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. --- S7.Net.Core/SocketClient.cs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/S7.Net.Core/SocketClient.cs b/S7.Net.Core/SocketClient.cs index 2535449..b58991a 100644 --- a/S7.Net.Core/SocketClient.cs +++ b/S7.Net.Core/SocketClient.cs @@ -21,7 +21,7 @@ namespace S7.Net socketEventArg.RemoteEndPoint = server; - socketEventArg.Completed += new EventHandler(delegate (object s, SocketAsyncEventArgs e) + var completedEvent = new EventHandler(delegate (object s, SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) { @@ -35,11 +35,15 @@ namespace S7.Net _clientDone.Set(); }); + socketEventArg.Completed += completedEvent; + _clientDone.Reset(); _socket.ConnectAsync(socketEventArg); _clientDone.WaitOne(TIMEOUT_MILLISECONDS); + + socketEventArg.Completed -= completedEvent; } public void SetReceiveTimeout(int milis) @@ -63,7 +67,7 @@ namespace S7.Net socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint; socketEventArg.UserToken = null; - socketEventArg.Completed += new EventHandler(delegate (object s, SocketAsyncEventArgs e) + var completedEvent = new EventHandler(delegate (object s, SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) { @@ -77,6 +81,8 @@ namespace S7.Net _clientDone.Set(); }); + socketEventArg.Completed += completedEvent; + socketEventArg.SetBuffer(buffer, 0, size); _clientDone.Reset(); @@ -84,6 +90,8 @@ namespace S7.Net _socket.SendAsync(socketEventArg); _clientDone.WaitOne(_sendTimeout); + + socketEventArg.Completed -= completedEvent; } else { @@ -104,7 +112,7 @@ namespace S7.Net socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint; socketEventArg.SetBuffer(buffer, 0, size); - socketEventArg.Completed += new EventHandler(delegate (object s, SocketAsyncEventArgs e) + var completedEvent = new EventHandler(delegate (object s, SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) { @@ -118,11 +126,15 @@ namespace S7.Net _clientDone.Set(); }); + socketEventArg.Completed += completedEvent; + _clientDone.Reset(); _socket.ReceiveAsync(socketEventArg); _clientDone.WaitOne(_receiveTimeout); + + socketEventArg.Completed -= completedEvent; } else { @@ -139,6 +151,8 @@ namespace S7.Net if (_socket != null) { _socket.Shutdown(SocketShutdown.Both); + _socket.Dispose(); + _socket = null; } } @@ -148,7 +162,7 @@ namespace S7.Net private static ManualResetEvent _clientDone = new ManualResetEvent(false); - private const int TIMEOUT_MILLISECONDS = 5000; + private const int TIMEOUT_MILLISECONDS = 1000; } } \ No newline at end of file