8 #ifndef SRC_XRDCL_XRDCLASYNCPAGEREADER_HH_
9 #define SRC_XRDCL_XRDCLASYNCPAGEREADER_HH_
18 #include <arpa/inet.h>
40 std::vector<uint32_t> &
digests ) :
51 uint64_t rdoff = chunks.front().offset;
53 for(
auto &ch : chunks )
57 digests.resize( pgcnt );
94 if( !st.IsOK() )
return st;
98 if( st.code ==
suRetry )
return st;
115 value = sysconf(_SC_IOV_MAX);
123 value &= ~uint32_t( 1 );
140 inline void addiov(
char *&buf,
size_t len )
143 iov.back().iov_base = buf;
144 iov.back().iov_len = len;
152 inline void addiov(
char *&buf, uint32_t len, uint32_t &dleft )
154 if( len > dleft ) len = dleft;
174 uint32_t dleft =
dlen;
179 if( dleft > pgspace + dgspace ) dleft = pgspace + dgspace;
197 char* pgbuf =
static_cast<char*
>( ch.
buffer ) +
choff;
201 uint32_t fdglen =
sizeof( uint32_t ) -
dgoff;
202 addiov( dgbuf, fdglen, dleft );
206 addiov( pgbuf, fpglen, dleft );
210 for(
size_t i = 0; i < fullpgs; ++i )
212 addiov( dgbuf,
sizeof( uint32_t ) );
218 uint32_t ldglen =
sizeof( uint32_t );
219 addiov( dgbuf, ldglen, dleft );
228 inline void shift(
void *&buffer,
size_t nbbts )
230 char *buf =
static_cast<char*
>( buffer );
296 if( btsread == 0 )
break;
std::vector< ChunkInfo > ChunkList
List of chunks.
Definition: XrdClXRootDResponses.hh:1046
char * data
Definition: XrdOucIOVec.hh:45
void * buffer
length of the chunk
Definition: XrdClXRootDResponses.hh:941
Definition: XrdOucIOVec.hh:65
static const int PageSize
Definition: XrdSysPageSize.hh:36
Describe a data chunk for vector read.
Definition: XrdClXRootDResponses.hh:907
Request status.
Definition: XrdClXRootDResponses.hh:218
uint64_t offset
Definition: XrdClXRootDResponses.hh:939
const uint16_t suRetry
Definition: XrdClStatus.hh:40
XRootDStatus ReadV(iovec *iov, int iocnt, int &bytesRead)
static int csNum(off_t offs, int count)
Compute the required size of a checksum vector based on offset & length.
A network socket.
Definition: XrdClSocket.hh:42