diff src/os/win32/ngx_socket.h @ 1633:74b2a52bc3c9

TransmitPackets(), ConnectEx(), and DisconnectEx()
author Igor Sysoev <igor@sysoev.ru>
date Sun, 11 Nov 2007 18:56:50 +0000
parents d4ea69372b94
children ca317d9b5c09
line wrap: on
line diff
--- a/src/os/win32/ngx_socket.h
+++ b/src/os/win32/ngx_socket.h
@@ -19,8 +19,8 @@ typedef SOCKET  ngx_socket_t;
 typedef int     socklen_t;
 
 
-#define ngx_socket(af, type, proto)                                         \
-                   WSASocket(af, type, proto, NULL, 0, WSA_FLAG_OVERLAPPED)
+#define ngx_socket(af, type, proto)                                          \
+    WSASocket(af, type, proto, NULL, 0, WSA_FLAG_OVERLAPPED)
 
 #define ngx_socket_n        "WSASocket()"
 
@@ -50,8 +50,8 @@ typedef BOOL (PASCAL FAR * LPFN_ACCEPTEX
     IN LPOVERLAPPED lpOverlapped
     );
 
-#define WSAID_ACCEPTEX \
-        {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_ACCEPTEX                                                       \
+    {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
 
 #endif
 
@@ -69,13 +69,31 @@ typedef VOID (PASCAL FAR * LPFN_GETACCEP
     OUT LPINT RemoteSockaddrLength
     );
 
-#define WSAID_GETACCEPTEXSOCKADDRS \
+#define WSAID_GETACCEPTEXSOCKADDRS                                           \
         {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
 
 #endif
 
 
-#ifndef LPFN_TRANSMITFILE
+#ifndef WSAID_TRANSMITFILE
+
+#ifndef TF_DISCONNECT
+
+#define TF_DISCONNECT           1
+#define TF_REUSE_SOCKET         2
+#define TF_WRITE_BEHIND         4
+#define TF_USE_DEFAULT_WORKER   0
+#define TF_USE_SYSTEM_THREAD    16
+#define TF_USE_KERNEL_APC       32
+
+typedef struct _TRANSMIT_FILE_BUFFERS {
+    LPVOID Head;
+    DWORD HeadLength;
+    LPVOID Tail;
+    DWORD TailLength;
+} TRANSMIT_FILE_BUFFERS, *PTRANSMIT_FILE_BUFFERS, FAR *LPTRANSMIT_FILE_BUFFERS;
+
+#endif
 
 typedef BOOL (PASCAL FAR * LPFN_TRANSMITFILE)(
     IN SOCKET hSocket,
@@ -87,19 +105,102 @@ typedef BOOL (PASCAL FAR * LPFN_TRANSMIT
     IN DWORD dwReserved
     );
 
-#define WSAID_TRANSMITFILE \
-        {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
+#define WSAID_TRANSMITFILE                                                   \
+    {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
 
 #endif
 
 
-extern LPFN_ACCEPTEX              acceptex;
-extern LPFN_GETACCEPTEXSOCKADDRS  getacceptexsockaddrs;
-extern LPFN_TRANSMITFILE          transmitfile;
+#ifndef WSAID_TRANSMITPACKETS
+
+/* OpenWatcom has a swapped TP_ELEMENT_FILE and TP_ELEMENT_MEMORY definition */
+
+#ifndef TP_ELEMENT_FILE
+
+#ifdef _MSC_VER
+#pragma warning(disable:4201) /* Nonstandard extension, nameless struct/union */
+#endif
+
+typedef struct _TRANSMIT_PACKETS_ELEMENT { 
+    ULONG dwElFlags; 
+#define TP_ELEMENT_MEMORY   1
+#define TP_ELEMENT_FILE     2
+#define TP_ELEMENT_EOP      4
+    ULONG cLength; 
+    union {
+        struct {
+            LARGE_INTEGER nFileOffset;
+            HANDLE        hFile;
+        };
+        PVOID             pBuffer;
+    };
+} TRANSMIT_PACKETS_ELEMENT, *PTRANSMIT_PACKETS_ELEMENT,
+    FAR *LPTRANSMIT_PACKETS_ELEMENT;
+
+#ifdef _MSC_VER
+#pragma warning(default:4201)
+#endif
+
+#endif
+
+typedef BOOL (PASCAL FAR * LPFN_TRANSMITPACKETS) (
+    SOCKET hSocket,                             
+    TRANSMIT_PACKETS_ELEMENT *lpPacketArray,                               
+    DWORD nElementCount,                
+    DWORD nSendSize,                
+    LPOVERLAPPED lpOverlapped,                  
+    DWORD dwFlags                               
+    );
+
+#define WSAID_TRANSMITPACKETS                                                \
+    {0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}
+
+#endif
+
+
+#ifndef WSAID_CONNECTEX
+
+typedef BOOL (PASCAL FAR * LPFN_CONNECTEX) (
+    IN SOCKET s,
+    IN const struct sockaddr FAR *name,
+    IN int namelen,
+    IN PVOID lpSendBuffer OPTIONAL,
+    IN DWORD dwSendDataLength,
+    OUT LPDWORD lpdwBytesSent,
+    IN LPOVERLAPPED lpOverlapped
+    );
+
+#define WSAID_CONNECTEX \
+    {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}
+
+#endif
+
+
+#ifndef WSAID_DISCONNECTEX
+
+typedef BOOL (PASCAL FAR * LPFN_DISCONNECTEX) (
+    IN SOCKET s,
+    IN LPOVERLAPPED lpOverlapped,
+    IN DWORD  dwFlags,
+    IN DWORD  dwReserved
+    );
+
+#define WSAID_DISCONNECTEX                                                   \
+    {0x7fda2e11,0x8630,0x436f,{0xa0,0x31,0xf5,0x36,0xa6,0xee,0xc1,0x57}}
+
+#endif
+
+
+extern LPFN_ACCEPTEX              ngx_acceptex;
+extern LPFN_GETACCEPTEXSOCKADDRS  ngx_getacceptexsockaddrs;
+extern LPFN_TRANSMITFILE          ngx_transmitfile;
+extern LPFN_TRANSMITPACKETS       ngx_transmitpackets;
+extern LPFN_CONNECTEX             ngx_connectex;
+extern LPFN_DISCONNECTEX          ngx_disconnectex;
 
 
 int ngx_tcp_push(ngx_socket_t s);
-#define ngx_tcp_push_n        "tcp_push()"
+#define ngx_tcp_push_n            "tcp_push()"
 
 
 #endif /* _NGX_SOCKET_H_INCLUDED_ */