* descriptors)
*/
CoreExport int OpenTCPSocket(const char* addr, int socktype = SOCK_STREAM);
+
+ /** Convert an address-port pair into a binary sockaddr
+ * @param addr The IP address, IPv4 or IPv6
+ * @param port The port, 0 for unspecified
+ * @param sa The structure to place the result in. Will be zeroed prior to conversion
+ * @return true if the conversion was successful, false if not.
+ */
+ CoreExport int aptosa(const char* addr, int port, irc::sockets::sockaddrs* sa);
+ /** Convert a binary sockaddr to an address-port pair
+ * @param sa The structure to convert
+ * @param addr the IP address
+ * @param port the port
+ * @return true if the conversion was successful, false if unknown address family
+ */
+ CoreExport int satoap(const irc::sockets::sockaddrs* sa, std::string& addr, int &port);
}
}
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
*/
}
/** 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
*/