31 #include <sys/types.h>
32 #include <netinet/in.h>
48 int &rlen,
int TimeOut)
53 if (Link->
Recv((
char *)&Hdr,
sizeof(Hdr), TimeOut) !=
sizeof(Hdr))
54 return "header not sent";
58 rlen =
static_cast<int>(ntohs(Hdr.
datalen));
59 if (rlen > blen)
return "data too long";
63 if (Link->
Recv(buff,rlen,TimeOut) != rlen)
return "data not received";
76 static const int xNum = 2;
78 struct iovec Liov[xNum];
79 int mlen = strlen(msg)+1;
85 Liov[0].iov_base = (
char *)&LEResp;
86 Liov[0].iov_len =
sizeof(LEResp);
87 Liov[1].iov_base = (
char *)msg;
88 Liov[1].iov_len = mlen;
92 Link->
Send(Liov, xNum);
101 char *buff,
int blen)
103 struct iovec ioV[2] = {{(
char *)&Hdr,
sizeof(Hdr)},
104 {(
char *)buff, (
size_t)blen}};
106 Hdr.
datalen = htons(
static_cast<unsigned short>(blen));
110 if (Link->
Send(ioV, 2) < 0)
return "request not sent";
119 char *buff,
int blen)
121 static const unsigned short ovhd =
sizeof(
kXR_unt32);
123 htons(
static_cast<unsigned short>(blen+ovhd))}, 0};
124 struct iovec ioV[2] = {{(
char *)&Resp,
sizeof(Resp)},
125 { buff, (size_t)blen}};
129 if (Link->
Send(ioV, 2) < 0)
return "response not sent";
static const char * Attend(XrdLink *Link, XrdCms::CmsRRHdr &Hdr, char *buff, int blen, int &rlen, int tmo=5000)
static const char * Respond(XrdLink *Link, XrdCms::CmsRspCode rcode, char *buff, int blen)
static const char * Request(XrdLink *Link, XrdCms::CmsRRHdr &Hdr, char *buff, int blen)
static int Complain(XrdLink *Link, int ecode, const char *msg)
int Recv(char *buff, int blen)
int Send(const char *buff, int blen)