35 #include <sys/types.h>
38 #include <sys/socket.h>
39 #include <systemd/sd-daemon.h>
62 bool XrdInet::AssumeV4 =
false;
64 const char *XrdInet::TraceID =
"Inet";
74 static const char *unk =
"unkown.endpoint";
84 {
if (theSem) theSem->
Post();
88 if (!(anum%60))
eDest->
Emsg(
"Accept",
"Unable to accept connections!");
94 if (theSem) theSem->
Post();
105 eDest->
Emsg(
"Accept",EACCES,
"accept TCP connection from",ipbuff);
114 {
eDest->
Emsg(
"Accept", ENOMEM,
"allocate new link for", myAddr.
Name(unk));
117 TRACE(NET,
"Accepted connection on port " <<
Portnum <<
" from "
138 if (port == 0 || (nSD = sd_listen_fds(0)) <= 0)
return Bind(port, contype);
142 int v4Sock = AF_INET;
144 uint16_t sdPort =
static_cast<uint16_t
>(port);
148 if (*contype !=
'u')
PortType = SOCK_STREAM;
156 for (
int i = 0; i < nSD; i++)
157 {
int sdFD = SD_LISTEN_FDS_START + i;
158 if (sd_is_socket_inet(sdFD, v4Sock,
PortType, -1, sdPort) > 0
159 || sd_is_socket_inet(sdFD, v6Sock,
PortType, -1, sdPort) > 0)
167 if (sd_is_socket(sdFD,v4Sock,
PortType,0) > 0
168 || sd_is_socket(sdFD,v6Sock,
PortType,0) > 0)
return Listen();
178 return Bind(port, contype);
187 static const char *unk =
"unkown.endpoint";
199 {
eDest->
Emsg(
"Connect", ENOMEM,
"allocate new link to", myAddr.
Name(unk));
202 TRACE(NET,
"Connected to " <<myAddr.
Name(unk) <<
':' <<port);
214 int XrdInet::Listen()
224 if (listen(
iofd, backlog) == 0)
return 0;
231 sprintf(eBuff,
"listen on port %d",
Portnum);
250 if (Patrol) Patrol->
Merge(secp);
int BindSD(int port, const char *contype="tcp")
XrdLink * Connect(const char *host, int port, int opts=0, int timeout=-1)
void Secure(XrdNetSecurity *secp)
XrdLink * Accept(int opts=0, int timeout=-1, XrdSysSemaphore *theSem=0)
static XrdLink * Alloc(XrdNetAddr &peer, int opts=0)
static const int noPort
Do not add port number.
int Format(char *bAddr, int bLen, fmtUse fmtType=fmtAuto, int fmtOpts=0)
@ fmtAuto
Hostname if already resolved o/w use fmtAddr.
const char * Name(const char *eName=0, const char **eText=0)
bool Authorize(const char *hSpec)
void Merge(XrdNetSecurity *srcp)
static int setOpts(int fd, int options, XrdSysError *eDest=0)
int Bind(int port, const char *contype="tcp")
int Connect(XrdNetAddr &myAddr, const char *dest, int port=-1, int opts=0, int timeout=-1)
int Accept(XrdNetAddr &myAddr, int opts=0, int timeout=-1)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)