Exemplo n.º 1
0
            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)));
                }
            }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 4
0
        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;
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }