#define ngx_close_socket_n "closesocket()"
-#ifndef WSAID_ACCEPTEX
-
-typedef BOOL (PASCAL FAR * LPFN_ACCEPTEX)(
- IN SOCKET sListenSocket,
- IN SOCKET sAcceptSocket,
- IN PVOID lpOutputBuffer,
- IN DWORD dwReceiveDataLength,
- IN DWORD dwLocalAddressLength,
- IN DWORD dwRemoteAddressLength,
- OUT LPDWORD lpdwBytesReceived,
- IN LPOVERLAPPED lpOverlapped
- );
-
-#define WSAID_ACCEPTEX \
- {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
-
-#endif
-
-
-#ifndef WSAID_GETACCEPTEXSOCKADDRS
-
-typedef VOID (PASCAL FAR * LPFN_GETACCEPTEXSOCKADDRS)(
- IN PVOID lpOutputBuffer,
- IN DWORD dwReceiveDataLength,
- IN DWORD dwLocalAddressLength,
- IN DWORD dwRemoteAddressLength,
- OUT struct sockaddr **LocalSockaddr,
- OUT LPINT LocalSockaddrLength,
- OUT struct sockaddr **RemoteSockaddr,
- OUT LPINT RemoteSockaddrLength
- );
-
-#define WSAID_GETACCEPTEXSOCKADDRS \
- {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
-
-#endif
-
-
-#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,
- IN HANDLE hFile,
- IN DWORD nNumberOfBytesToWrite,
- IN DWORD nNumberOfBytesPerSend,
- IN LPOVERLAPPED lpOverlapped,
- IN LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
- IN DWORD dwReserved
- );
-
-#define WSAID_TRANSMITFILE \
- {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}
-
-#endif
-
-
-#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;
-
-
#if (NGX_HAVE_POLL && !defined POLLIN)
/*
static u_int osviex;
static OSVERSIONINFOEX osvi;
-/* Should these pointers be per protocol ? */
-LPFN_ACCEPTEX ngx_acceptex;
-LPFN_GETACCEPTEXSOCKADDRS ngx_getacceptexsockaddrs;
-LPFN_TRANSMITFILE ngx_transmitfile;
-LPFN_TRANSMITPACKETS ngx_transmitpackets;
-LPFN_CONNECTEX ngx_connectex;
-LPFN_DISCONNECTEX ngx_disconnectex;
-
-static GUID ax_guid = WSAID_ACCEPTEX;
-static GUID as_guid = WSAID_GETACCEPTEXSOCKADDRS;
-static GUID tf_guid = WSAID_TRANSMITFILE;
-static GUID tp_guid = WSAID_TRANSMITPACKETS;
-static GUID cx_guid = WSAID_CONNECTEX;
-static GUID dx_guid = WSAID_DISCONNECTEX;
-
#if (NGX_LOAD_WSAPOLL)
ngx_wsapoll_pt WSAPoll;
ngx_int_t
ngx_os_init(ngx_log_t *log)
{
- DWORD bytes;
- SOCKET s;
WSADATA wsd;
ngx_err_t err;
ngx_time_t *tp;
/* STUB: ngx_uint_t max */
ngx_max_wsabufs = 1024 * 1024;
- /*
- * get AcceptEx(), GetAcceptExSockAddrs(), TransmitFile(),
- * TransmitPackets(), ConnectEx(), and DisconnectEx() addresses
- */
-
- s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
- if (s == (ngx_socket_t) -1) {
- ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
- ngx_socket_n " failed");
- return NGX_ERROR;
- }
-
- if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &ax_guid, sizeof(GUID),
- &ngx_acceptex, sizeof(LPFN_ACCEPTEX), &bytes, NULL, NULL)
- == -1)
- {
- ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
- "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
- "WSAID_ACCEPTEX) failed");
- }
-
- if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &as_guid, sizeof(GUID),
- &ngx_getacceptexsockaddrs, sizeof(LPFN_GETACCEPTEXSOCKADDRS),
- &bytes, NULL, NULL)
- == -1)
- {
- ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
- "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
- "WSAID_GETACCEPTEXSOCKADDRS) failed");
- }
-
- if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tf_guid, sizeof(GUID),
- &ngx_transmitfile, sizeof(LPFN_TRANSMITFILE), &bytes,
- NULL, NULL)
- == -1)
- {
- ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
- "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
- "WSAID_TRANSMITFILE) failed");
- }
-
- if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tp_guid, sizeof(GUID),
- &ngx_transmitpackets, sizeof(LPFN_TRANSMITPACKETS), &bytes,
- NULL, NULL)
- == -1)
- {
- ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
- "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
- "WSAID_TRANSMITPACKETS) failed");
- }
-
- if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &cx_guid, sizeof(GUID),
- &ngx_connectex, sizeof(LPFN_CONNECTEX), &bytes,
- NULL, NULL)
- == -1)
- {
- ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
- "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
- "WSAID_CONNECTEX) failed");
- }
-
- if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &dx_guid, sizeof(GUID),
- &ngx_disconnectex, sizeof(LPFN_DISCONNECTEX), &bytes,
- NULL, NULL)
- == -1)
- {
- ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
- "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
- "WSAID_DISCONNECTEX) failed");
- }
-
- if (ngx_close_socket(s) == -1) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
- ngx_close_socket_n " failed");
- }
-
#if (NGX_LOAD_WSAPOLL)
{
HMODULE hmod;