X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsocket.cpp;h=efe799bfc746f3436faa724172987e6bfd45a1a3;hb=37fd031da06761c8a050105b55d73a8ab499fb74;hp=ccae48a6d7cc654e2f7db2f063e5191f4dbd3595;hpb=3999c2eccf43c998e70d49023d8f35e3fa1632c8;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/socket.cpp b/src/socket.cpp index ccae48a6d..efe799bfc 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -27,10 +27,7 @@ bool InspIRCd::BindSocket(int sockfd, int port, const char* addr, bool dolisten) 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. @@ -72,13 +69,12 @@ bool InspIRCd::BindSocket(int sockfd, int port, const char* addr, bool dolisten) } // 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); @@ -86,7 +82,7 @@ int irc::sockets::OpenTCPSocket(const char* addr, int socktype) #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); @@ -97,11 +93,11 @@ int irc::sockets::OpenTCPSocket(const char* addr, int socktype) } else { - setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); + setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)); /* This is BSD compatible, setting l_onoff to 0 is *NOT* http://web.irc.org/mla/ircd-dev/msg02259.html */ linger.l_onoff = 1; linger.l_linger = 1; - setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &linger, sizeof(linger)); + setsockopt(sockfd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger)); return (sockfd); } } @@ -148,16 +144,16 @@ int InspIRCd::BindPorts(FailedPortList &failed_ports) } if (!skip) { - ClientListenSocket *ll = new ClientListenSocket(this, 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; } } } @@ -186,10 +182,10 @@ int InspIRCd::BindPorts(FailedPortList &failed_ports) 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; @@ -200,13 +196,13 @@ bool irc::sockets::aptosa(const char* addr, int port, irc::sockets::sockaddrs* s #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); @@ -273,7 +269,7 @@ std::string irc::sockets::satouser(const irc::sockets::sockaddrs* sa) { return std::string(buffer); } -int irc::sockets::sa_size(irc::sockets::sockaddrs& sa) +int irc::sockets::sa_size(const irc::sockets::sockaddrs& sa) { if (sa.sa.sa_family == AF_INET) return sizeof(sa.in4);