]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/inspsocket.h
Document ListenSocket class
[user/henk/code/inspircd.git] / include / inspsocket.h
index 077f20a6563521805ba5c3339de92e355adb5860..3791aa3e02cfb6ea05d0a5db3d26cb0ee15f18b0 100644 (file)
@@ -23,6 +23,7 @@
 #include "dns.h"
 #include "inspircd_config.h"
 #include "socket.h"
+#include "inspsocket.h"
 
 /**
  * States which a socket may be in
@@ -32,9 +33,15 @@ enum InspSocketState { I_DISCONNECTED, I_CONNECTING, I_CONNECTED, I_LISTENING, I
 /**
  * Error types which a socket may exhibit
  */
-enum InspSocketError { I_ERR_TIMEOUT, I_ERR_SOCKET, I_ERR_CONNECT, I_ERR_BIND, I_ERR_RESOLVE, I_ERR_WRITE };
+enum InspSocketError { I_ERR_TIMEOUT, I_ERR_SOCKET, I_ERR_CONNECT, I_ERR_BIND, I_ERR_RESOLVE, I_ERR_WRITE, I_ERR_NOMOREFDS };
 
 class InspSocket;
+class InspIRCd;
+
+using irc::sockets::insp_sockaddr;
+using irc::sockets::insp_inaddr;
+using irc::sockets::insp_ntoa;
+using irc::sockets::insp_aton;
 
 /**
  * InspSocket is an extendable socket class which modules
@@ -47,21 +54,13 @@ class InspSocket;
  * and use the InspSocket constructors to establish connections
  * and bindings.
  */
-class InspSocket : public Extensible
+class InspSocket : public EventHandler
 {
  public:
+       InspIRCd* Instance;
 
        std::deque<std::string> outbuffer;
 
-       /**
-        * The file descriptor of this socket
-        */
-        int fd;
-
-       /**
-        * The resolver for this socket
-        */
-
        /**
         * The hostname connected to
         */
@@ -169,7 +168,7 @@ class InspSocket : public Extensible
         * The default constructor does nothing
         * and should not be used.
         */
-       InspSocket();
+       InspSocket(InspIRCd* SI);
 
        /**
         * This constructor is used to associate
@@ -179,20 +178,20 @@ class InspSocket : public Extensible
         * will be set with the given IP address
         * and placed in CONNECTED state.
         */
-       InspSocket(int newfd, const char* ip);
+       InspSocket(InspIRCd* SI, int newfd, const char* ip);
 
        /**
         * This constructor is used to create a new
         * socket, either listening for connections, or an outbound connection to another host.
-        * Note that if you specify a hostname in the 'host' parameter, then there will be an extra
-        * step involved (a nonblocking DNS lookup) which will cause your connection to be established
-        * slower than if it was an IP. Therefore, use an IP address where it is available instead.
-        * @param host The hostname to connect to, or bind to
+        * Note that if you specify a hostname in the 'ipaddr' parameter, this class will not
+        * connect. You must resolve your hostnames before passing them to InspSocket. To do so,
+        * you should use the nonblocking class 'Resolver'.
+        * @param ipaddr The IP to connect to, or bind to
         * @param port The port number to connect to, or bind to
         * @param listening true to listen on the given host:port pair, or false to connect to them
         * @param maxtime Number of seconds to wait, if connecting, before the connection times out and an OnTimeout() event is generated
         */
-       InspSocket(const std::string &host, int port, bool listening, unsigned long maxtime);
+       InspSocket(InspIRCd* SI, const std::string &ipaddr, int port, bool listening, unsigned long maxtime);
 
        /**
         * This method is called when an outbound
@@ -362,6 +361,10 @@ class InspSocket : public Extensible
         * memory reclaimed.
         */
        void MarkAsClosed();
+
+       void HandleEvent(EventType et);
+
+       bool Readable();
 };
 
 #endif