37 #include <sys/types.h>
38 #include <sys/socket.h>
40 #include "XrdSys/XrdWin32.hh"
93 eDest->
Emsg(
"Accept",
"Network not bound to a port.");
101 eDest->
Emsg(
"Accept",
"UDP network not supported for NetAddr call.");
107 do {
if (timeout >= 0)
108 {
struct pollfd sfd = {
iofd,
109 POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI|POLLHUP,0};
110 do {retc = poll(&sfd, 1, timeout*1000);}
111 while(retc < 0 && (errno == EAGAIN || errno == EINTR));
114 eDest->
Emsg(
"Accept",
"Accept timed out.");
118 }
while(!do_Accept_TCP(myAddr,
opts));
134 eDest->
Emsg(
"Accept",
"Network not bound to a port.");
140 do {
if (timeout >= 0)
141 {
struct pollfd sfd = {
iofd,
142 POLLIN|POLLRDNORM|POLLRDBAND|POLLPRI|POLLHUP,0};
143 do {retc = poll(&sfd, 1, timeout*1000);}
144 while(retc < 0 && (errno == EAGAIN || errno == EINTR));
147 eDest->
Emsg(
"Accept",
"Accept timed out.");
151 }
while(!(
PortType == SOCK_STREAM ? do_Accept_TCP(myPeer,
opts)
152 : do_Accept_UDP(myPeer,
opts)));
176 if (*contype !=
'u')
PortType = SOCK_STREAM;
184 if (mySocket.
Open(0, bindport,
opts, buffsz) < 0)
215 {
eDest->
Emsg(
"Bind",
"Invalid bind path -", path);
225 if (*contype !=
'd')
PortType = SOCK_STREAM;
253 int port,
int opts,
int tmo)
273 const char *host,
int port,
int opts,
int tmo)
276 const struct sockaddr *sap;
287 if (mySocket.
Open(host, port,
opts, buffsz) < 0)
return 0;
291 memset((
void *)&myPeer.
Inet, 0,
sizeof(myPeer.
Inet));
293 const char *pn = mySocket.
Peername(&sap);
294 if (pn) {memcpy((
void *)&myPeer.
Inet, sap,
sizeof(myPeer.
Inet));
298 memset((
void *)&myPeer.
Inet, 0,
sizeof(myPeer.
Inet));
299 myPeer.
InetName = strdup(
"unknown");
345 int k = strlen(hname);
349 {hnp = hname + (k -
Domlen);
350 if (!strcmp(
Domain, hnp)) *hnp =
'\0';
385 static int noAcpt = 0;
396 do {newfd = XrdSysFD_Accept(
iofd, &IP.
Addr, &addrlen);}
397 while(newfd < 0 && errno == EINTR);
401 eDest->
Emsg(
"Accept", errno,
"perform accept");
410 snprintf(buff,
sizeof(buff),
"%d;", newfd);
429 hAddr.
Format(ipbuff,
sizeof(ipbuff),
433 eDest->
Emsg(
"Accept",EACCES,
"accept TCP connection from",ipbuff);
457 if (!do_Accept_TCP(tAddr,
opts))
return 0;
486 {
eDest->
Emsg(
"Accept", ENOMEM,
"accept UDP message");
493 }
while(dlen < 0 && errno == EINTR);
496 {
eDest->
Emsg(
"Receive", errno,
"perform UDP recvfrom()");
499 }
else bp->
data[dlen] =
'\0';
509 {
eDest->
Emsg(
"Accept", -EACCES,
"accept connection from",
510 uAddr.
Name(
"*unknown*"));
513 }
else uAddr.
Format(hBuff,
sizeof(hBuff),
520 {myPeer.
fd = XrdSysFD_Dup(
iofd);
526 memcpy(&myPeer.
Inet, &IP,
sizeof(myPeer.
Inet));
static const int noPort
Do not add port number.
const sockaddr * SockAddr()
bool isIPType(IPType ipType) const
int Format(char *bAddr, int bLen, fmtUse fmtType=fmtAuto, int fmtOpts=0)
@ fmtName
Hostname if it is resolvable o/w use fmtAddr.
@ fmtAuto
Hostname if already resolved o/w use fmtAddr.
const char * Name(const char *eName=0, const char **eText=0)
const char * Set(const char *hSpec, int pNum=PortInSpec)
void Recycle(XrdNetBuffer *bp)
bool Authorize(const char *hSpec)
void Merge(XrdNetSecurity *srcp)
int Open(const char *path, int port=-1, int flags=0, int sockbuffsz=0)
static int setOpts(int fd, int options, XrdSysError *eDest=0)
const char * Peername(const struct sockaddr **InetAddr=0, int *InetSize=0)
static int getWindow(int fd, int &Windowsz, XrdSysError *eDest=0)
static int Port(int fd, const char **eText=0)
int Bind(int port, const char *contype="tcp")
XrdNet(XrdSysError *erp, XrdNetSecurity *secp=0)
void unBind()
Unbind the network from any bound resouces.
int Connect(XrdNetAddr &myAddr, const char *dest, int port=-1, int opts=0, int timeout=-1)
int Relay(XrdNetPeer &Peer, const char *dest, int opts=0)
int Accept(XrdNetAddr &myAddr, int opts=0, int timeout=-1)
virtual void Secure(XrdNetSecurity *secp)
virtual ~XrdNet()
Destructor.
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)