コード例 #1
0
        public override Task <int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(TaskEx.FromCancellation <int>(cancellationToken));
            }

            var token = new PooledToken <int>(_pool.Get());
            var e     = token.SocketAsyncEventArgs;

            e.SetBuffer(buffer, offset, count);
            e.Completed += ReadCompleted;
            //_socket.Available
            try
            {
                if (!Socket.ReceiveAsync(e))
                {
                    ReadCompleted(Socket, e);
                }
            }
            catch (Exception ex)
            {
                ClearRead(e);
                token.TaskCompletionSource.SetException(ex);
            }
            return(token.Task);
        }
コード例 #2
0
        public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
        {
            if (cancellationToken.IsCancellationRequested)
            {
                return(TaskEx.FromCancellation <int>(cancellationToken));
            }

            var token = new PooledToken <bool>(_pool.Get());
            var e     = token.SocketAsyncEventArgs;

            e.SetBuffer(buffer, offset, count);
            e.Completed += WriteCompleted;
            try
            {
                if (!Socket.SendAsync(e))
                {
                    WriteCompleted(Socket, e);
                }
            }
            catch (Exception ex)
            {
                ClearWrite(e);
                token.TaskCompletionSource.SetException(ex);
            }
            return(token.Task);
        }
コード例 #3
0
ファイル: NetServer.cs プロジェクト: AndriyMik/SimplyFast
        public Task <ISocket> Accept(CancellationToken cancellation)
        {
            var token = new PooledToken <ISocket>(_pool.Get());
            var e     = token.SocketAsyncEventArgs;

            e.Completed += AcceptCompleted;
            try
            {
                if (!_socket.AcceptAsync(e))
                {
                    AcceptCompleted(_socket, e);
                }
            }
            catch (Exception ex)
            {
                ClearAccept(e);
                token.TaskCompletionSource.SetException(ex);
            }
            return(token.Task);
        }
コード例 #4
0
ファイル: NetServer.cs プロジェクト: AndriyMik/SimplyFast
        public Task Close(CancellationToken cancellation)
        {
            var token = new PooledToken <bool>(_pool.Get());
            var e     = token.SocketAsyncEventArgs;

            e.Completed += CloseCompleted;
            try
            {
                if (!_socket.DisconnectAsync(e))
                {
                    CloseCompleted(_socket, e);
                }
            }
            catch (Exception ex)
            {
                ClearClose(e);
                token.TaskCompletionSource.SetException(ex);
            }
            return(token.Task);
        }
コード例 #5
0
        public Task Disconnect()
        {
            var token = new PooledToken <bool>(_pool.Get());
            var e     = token.SocketAsyncEventArgs;

            e.Completed += DisconnectCompleted;
            try
            {
                if (!Socket.DisconnectAsync(e))
                {
                    DisconnectCompleted(Socket, e);
                }
            }
            catch (Exception ex)
            {
                ClearDisconnect(e);
                token.TaskCompletionSource.SetException(ex);
            }
            return(token.Task);
        }