]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/socket.h
Decide that it wasn't quite appropriate :(
[user/henk/code/inspircd.git] / include / socket.h
index bc1197283fbf5aa23ef1ffbb7570cfcd3f840927..1c343f122bda48636a7313564d1d4c6c849246cf 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
  *                       E-mail:
  *                <brain@chatspike.net>
  *               <Craig@chatspike.net>
 #include <netinet/in.h>
 #include <sstream>
 #include <string>
+#include "dns.h"
 
 /**
  * States which a socket may be in
  */
-enum InspSocketState { I_DISCONNECTED, I_CONNECTING, I_CONNECTED, I_LISTENING, I_ERROR };
+enum InspSocketState { I_DISCONNECTED, I_RESOLVING, I_CONNECTING, I_CONNECTED, I_LISTENING, I_ERROR };
 
 /**
  * Error types which a socket may exhibit
  */
-enum InspSocketError { I_ERR_TIMEOUT, I_ERR_SOCKET, I_ERR_CONNECT, I_ERR_BIND };
+enum InspSocketError { I_ERR_TIMEOUT, I_ERR_SOCKET, I_ERR_CONNECT, I_ERR_BIND, I_ERR_RESOLVE };
 
 /**
  * InspSocket is an extendable socket class which modules
@@ -53,6 +54,11 @@ private:
         */
         int fd;
 
+       /**
+        * The resolver for this socket
+        */
+       DNS dns;
+
        /**
         * The hostname connected to
         */
@@ -99,11 +105,16 @@ private:
        /**
         * Socket input buffer, used by read(). The class which
         * extends InspSocket is expected to implement an extendable
-        * buffer which can grow much larger than 16k,
+        * buffer which can grow much larger than 64k,
         * this buffer is just designed to be temporary storage.
         * space.
         */
-       char ibuf[16384];
+       char ibuf[65535];
+
+       /**
+        * The output buffer for this socket
+        */
+       std::string Buffer;
 
        /**
         * The IP address being connected
@@ -134,6 +145,8 @@ private:
         */
        void FlushWriteBuffer();
 
+       void SetQueues(int nfd);
+
 public:
 
        /**
@@ -154,8 +167,10 @@ public:
 
        /**
         * This constructor is used to create a new
-        * socket, either listening for connections,
-        * or an outbound connection to another host.
+        * 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
         * @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
@@ -201,9 +216,13 @@ public:
        /**
         * When an outbound connection fails, and the
         * attempt times out, you will receive this event.
-        * The mthod will trigger once maxtime secons are
+        * The method will trigger once maxtime seconds are
         * reached (as given in the constructor) just
         * before the socket's descriptor is closed.
+        * A failed DNS lookup may cause this event if
+        * the DNS server is not responding, as well as
+        * a failed connect() call, because DNS lookups are
+        * nonblocking as implemented by this class.
         */
        virtual void OnTimeout();
 
@@ -303,6 +322,9 @@ public:
         * used for this socket.
         */
        virtual ~InspSocket();
+
+       virtual bool DoResolve();
+       virtual bool DoConnect();
 };
 
 #endif