]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/socket.h
Move forking code into a function and remove DaemonSeed.
[user/henk/code/inspircd.git] / include / socket.h
index 52294fe719eb329018375ed4bfbd1f054cf4b077..6ecb230206d07ef4df369ff72777e84a2431613f 100644 (file)
@@ -32,6 +32,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/un.h>
 #include <netinet/in.h>
 #include <unistd.h>
 #include <fcntl.h>
@@ -59,8 +60,11 @@ namespace irc
                        struct sockaddr sa;
                        struct sockaddr_in in4;
                        struct sockaddr_in6 in6;
+                       struct sockaddr_un un;
+                       /** Return the family of the socket (e.g. AF_INET). */
+                       int family() const;
                        /** Return the size of the structure for syscall passing */
-                       int sa_size() const;
+                       socklen_t sa_size() const;
                        /** Return port number or -1 if invalid */
                        int port() const;
                        /** Return IP only */
@@ -84,7 +88,7 @@ namespace irc
                        /** Construct a CIDR mask from the string. Will normalize (127.0.0.1/8 => 127.0.0.0/8). */
                        cidr_mask(const std::string& mask);
                        /** Construct a CIDR mask of a given length from the given address */
-                       cidr_mask(const irc::sockets::sockaddrs& addr, int len);
+                       cidr_mask(const irc::sockets::sockaddrs& addr, unsigned char len);
                        /** Equality of bits, type, and length */
                        bool operator==(const cidr_mask& other) const;
                        /** Ordering defined for maps */
@@ -117,16 +121,24 @@ namespace irc
                 */
                CoreExport bool aptosa(const std::string& 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
+               /** Convert a UNIX socket path to a binary sockaddr.
+                * @param path The path to the UNIX socket.
+                * @param sa The structure to place the result in. Will be zeroed prior to conversion.
+                * @return True if the conversion was successful; otherwise, false.
                 */
-               CoreExport bool satoap(const irc::sockets::sockaddrs& sa, std::string& addr, int &port);
+               CoreExport bool untosa(const std::string& path, irc::sockets::sockaddrs& sa);
+
+               /** Determines whether the specified file is a UNIX socket.
+                * @param file The path to the file to check.
+                * @return True if the file is a UNIX socket; otherwise, false.
+                */
+               CoreExport bool isunix(const std::string& file);
        }
 }
 
+/** A list of failed port bindings, used for informational purposes on startup */
+typedef std::vector<std::pair<irc::sockets::sockaddrs, int> > FailedPortList;
+
 #include "socketengine.h"
 /** This class handles incoming connections on client ports.
  * It will create a new User for every valid connection
@@ -136,15 +148,23 @@ class CoreExport ListenSocket : public EventHandler
 {
  public:
        reference<ConfigTag> bind_tag;
-       std::string bind_addr;
-       int bind_port;
-       /** Human-readable bind description */
-       std::string bind_desc;
+       const irc::sockets::sockaddrs bind_sa;
+
+       class IOHookProvRef : public dynamic_reference_nocheck<IOHookProvider>
+       {
+        public:
+               IOHookProvRef()
+                       : dynamic_reference_nocheck<IOHookProvider>(NULL, std::string())
+               {
+               }
+       };
+
+       typedef TR1NS::array<IOHookProvRef, 2> IOHookProvList;
 
-       /** The IOHook provider which handles connections on this socket,
-        * NULL if there is none.
+       /** IOHook providers for handling connections on this socket,
+        * may be empty.
         */
-       dynamic_reference_nocheck<IOHookProvider> iohookprov;
+       IOHookProvList iohookprovs;
 
        /** Create a new listening socket
         */