| /* | |
| * Copyright (C) Igor Sysoev | |
| */ | |
| #ifndef _NGX_SOCKET_H_INCLUDED_ | |
| #define _NGX_SOCKET_H_INCLUDED_ | |
| #include <ngx_config.h> | |
| #include <ngx_core.h> | |
| #define NGX_WRITE_SHUTDOWN SD_SEND | |
| 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_n "WSASocket()" | |
| int ngx_nonblocking(ngx_socket_t s); | |
| int ngx_blocking(ngx_socket_t s); | |
| #define ngx_nonblocking_n "ioctlsocket(FIONBIO)" | |
| #define ngx_blocking_n "ioctlsocket(!FIONBIO)" | |
| #define ngx_shutdown_socket shutdown | |
| #define ngx_shutdown_socket_n "shutdown()" | |
| #define ngx_close_socket closesocket | |
| #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; | |
| int ngx_tcp_push(ngx_socket_t s); | |
| #define ngx_tcp_push_n "tcp_push()" | |
| #endif /* _NGX_SOCKET_H_INCLUDED_ */ |