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); }
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); }
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); }
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); }
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); }