public override Task ConnectAsync(EndPoint remoteAddress, EndPoint localAddress) { NativeChannel ch = this.Channel; if (!ch.Open) { return(this.CreateClosedChannelExceptionTask()); } ConnectRequest request = null; try { if (ch.connectPromise != null) { throw new InvalidOperationException("connection attempt already made"); } ch.connectPromise = new TaskCompletionSource(remoteAddress); if (localAddress != null) { ch.DoBind(localAddress); } request = new TcpConnect(this, (IPEndPoint)remoteAddress); return(ch.connectPromise.Task); } catch (Exception ex) { request?.Dispose(); this.CloseIfClosed(); return(TaskEx.FromException(this.AnnotateConnectException(ex, remoteAddress))); } }
public static Tcp ConnectTo(this Tcp tcp, IPEndPoint remoteEndPoint, Action <Tcp, Exception> connectedAction, bool dualStack = false) { if (tcp is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.tcp); } if (remoteEndPoint is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.remoteEndPoint); } if (connectedAction is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.connectedAction); } TcpConnect request = null; try { request = new TcpConnect(tcp, remoteEndPoint, connectedAction); } catch (Exception) { request?.Dispose(); throw; } return(tcp); }
void DoConnect(EndPoint remoteAddress, EndPoint localAddress) { ConnectRequest request = null; try { if (localAddress != null) { this.DoBind(localAddress); } request = new TcpConnect((INativeUnsafe)this.Unsafe, (IPEndPoint)remoteAddress); } catch { request?.Dispose(); throw; } }
void DoConnect(EndPoint remoteAddress, EndPoint localAddress) { ConnectRequest request = null; try { if (localAddress is object) { DoBind(localAddress); } request = new TcpConnect(Unsafe, (IPEndPoint)remoteAddress); } catch { request?.Dispose(); throw; } }
public Tcp ConnectTo(IPEndPoint remoteEndPoint, Action <Tcp, Exception> connectedAction) { Contract.Requires(remoteEndPoint != null); Contract.Requires(connectedAction != null); TcpConnect request = null; try { request = new TcpConnect(this, remoteEndPoint, connectedAction); } catch (Exception exception) { Log.Error($"{this.HandleType} {this.InternalHandle} Failed to connect to {remoteEndPoint}", exception); request?.Dispose(); throw; } return(this); }
public static Tcp ConnectTo(this Tcp tcp, IPEndPoint remoteEndPoint, Action <Tcp, Exception> connectedAction, bool dualStack = false) { Contract.Requires(tcp != null); Contract.Requires(remoteEndPoint != null); Contract.Requires(connectedAction != null); TcpConnect request = null; try { request = new TcpConnect(tcp, remoteEndPoint, connectedAction); } catch (Exception) { request?.Dispose(); throw; } return(tcp); }