]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/socketengine.h
Bump the InspIRCd ABI version.
[user/henk/code/inspircd.git] / include / socketengine.h
index fa2f263583846b7746b20f547c706b09dd7055e1..9202c179dab36ff553dfc8058fa99ab3daa19266 100644 (file)
@@ -164,6 +164,12 @@ class CoreExport EventHandler : public classbase
         * registered with the SocketEngine
         */
        int fd;
+
+       /** Swaps the internals of this EventHandler with another one.
+        * @param other A EventHandler to swap internals with.
+        */
+       void SwapInternals(EventHandler& other);
+
  public:
        /** Get the current file descriptor
         * @return The file descriptor of this handler
@@ -266,20 +272,26 @@ class CoreExport SocketEngine
         **/
        static std::vector<EventHandler*> ref;
 
- protected:
-       /** Current number of descriptors in the engine
-        */
+       /** Current number of descriptors in the engine. */
        static size_t CurrentSetSize;
+
+       /** The maximum number of descriptors in the engine. */
+       static size_t MaxSetSize;
+
        /** List of handlers that want a trial read/write
         */
        static std::set<int> trials;
 
-       static int MAX_DESCRIPTORS;
-
        /** Socket engine statistics: count of various events, bandwidth usage
         */
        static Statistics stats;
 
+       /** Look up the fd limit using rlimit. */
+       static void LookupMaxFds();
+
+       /** Terminates the program when the socket engine fails to initialize. */
+       static void InitError();
+
        static void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
 
        /** Add an event handler to the base socket engine. AddFd(EventHandler*, int) should call this.
@@ -292,7 +304,7 @@ class CoreExport SocketEngine
        static void ResizeDouble(std::vector<T>& vect)
        {
                if (SocketEngine::CurrentSetSize > vect.size())
-                       vect.resize(vect.size() * 2);
+                       vect.resize(SocketEngine::CurrentSetSize * 2);
        }
 
 public:
@@ -344,10 +356,10 @@ public:
 
        /** Returns the number of file descriptors reported by the system this program may use
         * when it was started.
-        * @return If positive, the number of file descriptors that the system reported that we
-        * may use. Otherwise (<= 0) this number could not be determined.
+        * @return If non-zero the number of file descriptors that the system reported that we
+        * may use.
         */
-       static int GetMaxFds() { return MAX_DESCRIPTORS; }
+       static size_t GetMaxFds() { return MaxSetSize; }
 
        /** Returns the number of file descriptors being queried
         * @return The set size
@@ -478,20 +490,18 @@ public:
         * @param buf The buffer in which the data that is sent is stored.
         * @param len The size of the buffer.
         * @param flags A flag value that controls the sending of the data.
-        * @param to The remote IP address and port.
-        * @param tolen The size of the to parameter.
+        * @param address The remote IP address and port.
         * @return This method should return exactly the same values as the system call it emulates.
         */
-       static int SendTo(EventHandler* fd, const void *buf, size_t len, int flags, const sockaddr *to, socklen_t tolen);
+       static int SendTo(EventHandler* fd, const void* buf, size_t len, int flags, const irc::sockets::sockaddrs& address);
 
        /** Abstraction for BSD sockets connect(2).
         * This function should emulate its namesake system call exactly.
         * @param fd This version of the call takes an EventHandler instead of a bare file descriptor.
-        * @param serv_addr The server IP address and port.
-        * @param addrlen The size of the sockaddr parameter.
+        * @param address The server IP address and port.
         * @return This method should return exactly the same values as the system call it emulates.
         */
-       static int Connect(EventHandler* fd, const sockaddr *serv_addr, socklen_t addrlen);
+       static int Connect(EventHandler* fd, const irc::sockets::sockaddrs& address);
 
        /** Make a file descriptor blocking.
         * @param fd a file descriptor to set to blocking mode