From fa3e1d5d4d803840b6bf06d9116353fab55fc686 Mon Sep 17 00:00:00 2001 From: danieldg Date: Mon, 4 May 2009 23:24:00 +0000 Subject: Canonicalize bind addresses when creating listen sockets This fixes /stats p output for SSL ports not working if a non-canonical address is used in the configuration (IPv6 with :: or mixed hexadecimal case). This also cleans up some now-useless sockaddr[2] allocations. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11361 e03df62e-2008-0410-955e-edbf42e46eb7 --- include/socket.h | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'include') diff --git a/include/socket.h b/include/socket.h index a4e9cf43b..c7b87d583 100644 --- a/include/socket.h +++ b/include/socket.h @@ -174,21 +174,22 @@ class CoreExport ListenSocketBase : public EventHandler InspIRCd* ServerInstance; /** Socket description (shown in stats p) */ std::string desc; - /** Socket address family */ - int family; + /** Address socket is bound to */ std::string bind_addr; /** Port socket is bound to */ int bind_port; - static sockaddr *sock_us; - - static sockaddr *client; - - static sockaddr *raddr; - - static unsigned int socketcount; - + /** The client address if the most recently connected client. + * Should only be used when accepting a new client. + */ + static irc::sockets::sockaddrs client; + /** The server address used by the most recently connected client. + * This may differ from the bind address by having a nonzero address, + * if the port is wildcard bound, or being IPv4 on a 6to4 IPv6 port. + * The address family will always match that of "client" + */ + static irc::sockets::sockaddrs server; public: /** Create a new listening socket */ @@ -213,16 +214,11 @@ class CoreExport ListenSocketBase : public EventHandler } /** Get port number for socket */ - int GetPort() - { - return bind_port; - } + int GetPort() { return bind_port; } + /** Get IP address socket is bound to */ - std::string &GetIP() - { - return bind_addr; - } + const std::string &GetIP() { return bind_addr; } /** Handles sockets internals crap of a connection, convenience wrapper really */ -- cgit v1.2.3