19 #ifndef SRC_XRDCL_XRDCLASYNCPAGEREADER_HH_
20 #define SRC_XRDCL_XRDCLASYNCPAGEREADER_HH_
29 #include <arpa/inet.h>
51 std::vector<uint32_t> &
digests ) :
63 uint64_t rdoff = chunks.front().offset;
65 for(
auto &ch : chunks )
69 digests.resize( pgcnt );
144 value = sysconf(_SC_IOV_MAX);
152 value &= ~uint32_t( 1 );
169 inline void addiov(
char *&buf,
size_t len )
172 iov.back().iov_base = buf;
173 iov.back().iov_len = len;
181 inline void addiov(
char *&buf, uint32_t len, uint32_t &dleft )
183 if( len > dleft ) len = dleft;
204 uint32_t dleft =
dlen;
209 if( dleft > pgspace + dgspace )
210 dleft = pgspace + dgspace;
228 char* pgbuf =
static_cast<char*
>( ch.
buffer ) +
choff;
232 uint32_t fdglen =
sizeof( uint32_t ) -
dgoff;
233 addiov( dgbuf, fdglen, dleft );
238 addiov( pgbuf, fpglen, dleft );
243 for(
size_t i = 0; i < fullpgs; ++i )
245 addiov( dgbuf,
sizeof( uint32_t ), dleft );
253 uint32_t ldglen =
sizeof( uint32_t );
254 addiov( dgbuf, ldglen, dleft );
258 addiov( pgbuf, dleft, dleft );
264 inline void shift(
void *&buffer,
size_t nbbts )
266 char *buf =
static_cast<char*
>( buffer );
332 if( btsread == 0 )
break;
ServerResponseStatus status
Definition: XProtocol.hh:1305
std::vector< ChunkInfo > ChunkList
List of chunks.
Definition: XrdClXRootDResponses.hh:1046
char * data
Definition: XrdOucIOVec.hh:45
ServerResponseBody_pgRead pgread
Definition: XProtocol.hh:1308
struct ServerResponseBody_Status bdy
Definition: XProtocol.hh:1257
Definition: XProtocol.hh:1303
kXR_int64 offset
Definition: XProtocol.hh:1056
void * buffer
length of the chunk
Definition: XrdClXRootDResponses.hh:941
Definition: XrdOucIOVec.hh:65
kXR_int32 dlen
Definition: XProtocol.hh:1236
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
union ServerResponseV2::@1 info
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