Fix issue with connection management.

This commit is contained in:
Christian Kratky
2017-08-17 22:49:16 +02:00
parent 598ed66a3b
commit c90bdbfb93
7 changed files with 159 additions and 92 deletions
@@ -12,12 +12,11 @@ namespace MQTTnet.Implementations
{
public sealed class MqttTcpChannel : IMqttCommunicationChannel, IDisposable
{
private readonly Socket _socket;
private Socket _socket;
private SslStream _sslStream;
public MqttTcpChannel()
{
_socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
}
public MqttTcpChannel(Socket socket, SslStream sslStream)
@@ -31,6 +30,11 @@ namespace MQTTnet.Implementations
if (options == null) throw new ArgumentNullException(nameof(options));
try
{
if (_socket == null)
{
_socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
}
await Task.Factory.FromAsync(_socket.BeginConnect, _socket.EndConnect, options.Server, options.GetPort(), null);
if (options.TlsOptions.UseTls)
@@ -49,8 +53,7 @@ namespace MQTTnet.Implementations
{
try
{
_sslStream.Dispose();
_socket.Dispose();
Dispose();
return Task.FromResult(0);
}
catch (SocketException exception)
@@ -108,6 +111,9 @@ namespace MQTTnet.Implementations
{
_socket?.Dispose();
_sslStream?.Dispose();
_socket = null;
_sslStream = null;
}
private static X509CertificateCollection LoadCertificates(MqttClientOptions options)
@@ -12,12 +12,11 @@ namespace MQTTnet.Implementations
{
public sealed class MqttTcpChannel : IMqttCommunicationChannel, IDisposable
{
private readonly Socket _socket;
private Socket _socket;
private SslStream _sslStream;
public MqttTcpChannel()
{
_socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
}
public MqttTcpChannel(Socket socket, SslStream sslStream)
@@ -31,6 +30,11 @@ namespace MQTTnet.Implementations
if (options == null) throw new ArgumentNullException(nameof(options));
try
{
if (_socket == null)
{
_socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
}
await _socket.ConnectAsync(options.Server, options.GetPort());
if (options.TlsOptions.UseTls)
@@ -49,8 +53,7 @@ namespace MQTTnet.Implementations
{
try
{
_sslStream.Dispose();
_socket.Dispose();
Dispose();
return Task.FromResult(0);
}
catch (SocketException exception)
@@ -101,6 +104,9 @@ namespace MQTTnet.Implementations
{
_socket?.Dispose();
_sslStream?.Dispose();
_socket = null;
_sslStream = null;
}
private static X509CertificateCollection LoadCertificates(MqttClientOptions options)
@@ -15,11 +15,10 @@ namespace MQTTnet.Implementations
{
public sealed class MqttTcpChannel : IMqttCommunicationChannel, IDisposable
{
private readonly StreamSocket _socket;
private StreamSocket _socket;
public MqttTcpChannel()
{
_socket = new StreamSocket();
}
public MqttTcpChannel(StreamSocket socket)
@@ -32,6 +31,11 @@ namespace MQTTnet.Implementations
if (options == null) throw new ArgumentNullException(nameof(options));
try
{
if (_socket == null)
{
_socket = new StreamSocket();
}
if (!options.TlsOptions.UseTls)
{
await _socket.ConnectAsync(new HostName(options.Server), options.GetPort().ToString());
@@ -59,7 +63,7 @@ namespace MQTTnet.Implementations
{
try
{
_socket.Dispose();
Dispose();
return Task.FromResult(0);
}
catch (SocketException exception)
@@ -100,6 +104,8 @@ namespace MQTTnet.Implementations
public void Dispose()
{
_socket?.Dispose();
_socket = null;
}
private static Certificate LoadCertificate(MqttClientOptions options)