]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/socketengine.h
Comments
[user/henk/code/inspircd.git] / include / socketengine.h
index 729f5e0909a8fb66275857bb28cd5bd1c8f8fb57..ce701beff4a14ac3f510737ecc42bc19c2467987 100644 (file)
  */
 enum EventType
 {
+       /** Read event */
        EVENT_READ      =       0,
+       /** Write event */
        EVENT_WRITE     =       1,
+       /** Error event */
        EVENT_ERROR     =       2
 };
 
@@ -54,7 +57,7 @@ class InspIRCd;
  * must have a file descriptor. What this file descriptor
  * is actually attached to is completely up to you.
  */
-class EventHandler : public Extensible
+class CoreExport EventHandler : public Extensible
 {
  protected:
        /** File descriptor.
@@ -111,7 +114,7 @@ class EventHandler : public Extensible
         * If this function is unimplemented, the base class
         * will return false.
         *
-         * NOTE: You cannot set both Readable() and
+        * NOTE: You cannot set both Readable() and
         * Writeable() to true. If you wish to receive
         * a write event for your object, you must call
         * SocketEngine::WantWrite() instead. This will
@@ -129,6 +132,25 @@ class EventHandler : public Extensible
         * and EVENT_WRITE for write events.
         */
        virtual void HandleEvent(EventType et, int errornum = 0) = 0;
+
+#ifdef WINDOWS
+
+       /** "Fake" file descriptor. This is windows-specific.
+        */
+       int m_internalFd;
+
+       /** Pointer to read event. We delete this so the buffer can't be used
+        * after the socket is deleted, and so it doesn't leak memory
+        */
+       void* m_readEvent;
+       /** Pointer to a write event.
+        */
+       void* m_writeEvent;
+       /** Pointer to an accept event.
+        */
+       void* m_acceptEvent;
+
+#endif
 };
 
 /** Provides basic file-descriptor-based I/O support.
@@ -149,7 +171,7 @@ class EventHandler : public Extensible
  * have to be aware of which SocketEngine derived
  * class they are using.
  */
-class SocketEngine : public Extensible
+class CoreExport SocketEngine : public Extensible
 {
 protected:
        /** Owner/Creator
@@ -242,14 +264,14 @@ public:
         * @param fd The event handler to look for
         * @return True if this fd has an event handler
         */
-       bool HasFd(int fd);
+       virtual bool HasFd(int fd);
 
        /** Returns the EventHandler attached to a specific fd.
         * If the fd isnt in the socketengine, returns NULL.
         * @param fd The event handler to look for
         * @return A pointer to the event handler, or NULL
         */
-       EventHandler* GetRef(int fd);
+       virtual EventHandler* GetRef(int fd);
 
        /** Waits for events and dispatches them to handlers.
         * Please note that this doesnt wait long, only
@@ -271,3 +293,4 @@ public:
 };
 
 #endif
+