]> 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 615c44fd7ae7a706611cc4ac8befc88e7018d4d4..ad3e581574015c13b2d30a0bd3027bafd710d563 100644 (file)
@@ -14,7 +14,7 @@
 #ifndef __SOCKETENGINE_IOCP__
 #define __SOCKETENGINE_IOCP__
 
-#define READ_BUFFER_SIZE 500
+#define READ_BUFFER_SIZE 600
 #define USING_IOCP 1
 
 #include "inspircd_config.h"
 #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;
-       int m_params;
-
+#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];
+       unsigned long udp_len;
+       sockaddr udp_sockaddr[2];
+       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.
@@ -82,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
         */
@@ -173,11 +210,9 @@ public:
         * @return A pointer to the event handler, or NULL
         */
        EventHandler* GetIntRef(int fd);
-};
 
-//typedef void(*OpHandler)(EventHandler)
-/** Event Handler Array
- */
+       bool BoundsCheckFd(EventHandler* eh);
+};
 
 /** Creates a SocketEngine
  */