]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/socketengine_iocp.h
Windows specific data types in EventHandler are now Extensible items
[user/henk/code/inspircd.git] / include / socketengine_iocp.h
index 5de7af03f25ee5fc807c1dcc6ffb1b07684d94e0..ad3e581574015c13b2d30a0bd3027bafd710d563 100644 (file)
 #include "inspircd.h"
 #include "socketengine.h"
 
+/** Socket overlapped event types
+ */
 enum SocketIOEvent
 {
+       /** Read ready */
        SOCKET_IO_EVENT_READ_READY                      = 0,
+       /** Write ready */
        SOCKET_IO_EVENT_WRITE_READY                     = 1,
+       /** Accept ready */
        SOCKET_IO_EVENT_ACCEPT                          = 2,
+       /** Error occured */
        SOCKET_IO_EVENT_ERROR                           = 3,
+       /** Number of events */
        NUM_SOCKET_IO_EVENTS                            = 4,
 };
 
+/** Represents a windows overlapped IO event
+ */
 class Overlapped
 {
  public:
+       /** Overlap event */
        OVERLAPPED m_overlap;
+       /** Type of event */
        SocketIOEvent m_event;
 #ifdef WIN64
+       /** Parameters */
        unsigned __int64 m_params;
 #else
+       /** Parameters */
        unsigned long m_params;
 #endif
-
+       /** Create an overlapped event
+        */
        Overlapped(SocketIOEvent ev, int params) : m_event(ev), m_params(params)
        {
                memset(&m_overlap, 0, sizeof(OVERLAPPED));
        }
 };
 
+/** Specific to UDP sockets with overlapped IO
+ */
 struct udp_overlap
 {
        unsigned char udp_buffer[600];
@@ -57,12 +73,16 @@ struct udp_overlap
        unsigned long udp_sockaddr_len;
 };
 
+/** Specific to accepting sockets with overlapped IO
+ */
 struct accept_overlap
 {
        int socket;
        char buf[1024];
 };
 
+/** Implementation of SocketEngine that implements windows IO Completion Ports
+ */
 class IOCPEngine : public SocketEngine
 {
        /** Creates a "fake" file descriptor for use with an IOCP socket.
@@ -94,6 +114,11 @@ class IOCPEngine : public SocketEngine
        map<int, EventHandler*> m_binding;
 
 public:
+       /** Holds the preallocated buffer passed to WSARecvFrom
+        * function. Yes, I know, it's a dirty hack.
+        */
+       udp_overlap * udp_ov;
+
        /** Creates an IOCP Socket Engine
         * @param Instance The creator of this object
         */
@@ -186,16 +211,9 @@ public:
         */
        EventHandler* GetIntRef(int fd);
 
-       /** Holds the preallocated buffer passed to WSARecvFrom\r
-        * function. Yes, I know, it's a dirty hack.\r
-        */\r
-       udp_overlap * udp_ov;\r
+       bool BoundsCheckFd(EventHandler* eh);
 };
 
-//typedef void(*OpHandler)(EventHandler)
-/** Event Handler Array
- */
-
 /** Creates a SocketEngine
  */
 class SocketEngineFactory