public override int Read(byte[] buffer, int offset, int count) { if (CanRead) { uint requestId; var waitHandle = sftp.CreateWaitHandle(out requestId); sftp.session.Socket.WritePacket(new SftpRead(sftp.RemoteChannel, requestId, handle, Convert.ToUInt64(Position), Convert.ToUInt32(count))); waitHandle.WaitOne(); byte[] data = new byte[0]; if (waitHandle.Result != null) { data = ((SftpData)waitHandle.Result).Data; Buffer.BlockCopy(data, 0, buffer, offset, data.Length); Position += data.Length; } sftp.DestroyWaitHandle(requestId); return(data.Length); } else { throw new IOException("Stream cannot be read from."); } }