sockaddrs servaddr;
int ret;
- if (*addr == '*' || *addr == '\0')
- addr = NULL;
-
- if (port == -1 && !addr)
+ if ((*addr == '*' || *addr == '\0') && port == -1)
{
/* Port -1: Means UDP IPV4 port binding - Special case
* used by DNS engine.
}
// Open a TCP Socket
-int irc::sockets::OpenTCPSocket(const char* addr, int socktype)
+int irc::sockets::OpenTCPSocket(const std::string& addr, int socktype)
{
int sockfd;
int on = 1;
- addr = addr;
struct linger linger = { 0, 0 };
- if (!*addr)
+ if (addr.empty())
{
#ifdef IPV6
sockfd = socket (PF_INET6, socktype, 0);
#endif
sockfd = socket (PF_INET, socktype, 0);
}
- else if (strchr(addr,':'))
+ else if (addr.find(':') != std::string::npos)
sockfd = socket (PF_INET6, socktype, 0);
else
sockfd = socket (PF_INET, socktype, 0);
}
if (!skip)
{
- ClientListenSocket *ll = new ClientListenSocket(portno, Addr);
+ ClientListenSocket *ll = new ClientListenSocket(portno, Addr, "clients", *Desc ? Desc : "plaintext");
if (ll->GetFd() > -1)
{
bound++;
- ll->SetDescription(*Desc ? Desc : "plaintext");
ports.push_back(ll);
}
else
{
failed_ports.push_back(std::make_pair(bind_readable, strerror(errno)));
+ delete ll;
}
}
}
return bound;
}
-bool irc::sockets::aptosa(const char* addr, int port, irc::sockets::sockaddrs* sa)
+bool irc::sockets::aptosa(const std::string& addr, int port, irc::sockets::sockaddrs* sa)
{
memset(sa, 0, sizeof(*sa));
- if (!addr || !*addr)
+ if (addr.empty())
{
#ifdef IPV6
sa->in6.sin6_family = AF_INET6;
#endif
return true;
}
- else if (inet_pton(AF_INET, addr, &sa->in4.sin_addr) > 0)
+ else if (inet_pton(AF_INET, addr.c_str(), &sa->in4.sin_addr) > 0)
{
sa->in4.sin_family = AF_INET;
sa->in4.sin_port = htons(port);
return true;
}
- else if (inet_pton(AF_INET6, addr, &sa->in6.sin6_addr) > 0)
+ else if (inet_pton(AF_INET6, addr.c_str(), &sa->in6.sin6_addr) > 0)
{
sa->in6.sin6_family = AF_INET6;
sa->in6.sin6_port = htons(port);