|  |  | 
|  | /* | 
|  | * 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 LPFN_TRANSMITFILE | 
|  |  | 
|  | 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 | 
|  |  | 
|  |  | 
|  | extern LPFN_ACCEPTEX              acceptex; | 
|  | extern LPFN_GETACCEPTEXSOCKADDRS  getacceptexsockaddrs; | 
|  | extern LPFN_TRANSMITFILE          transmitfile; | 
|  |  | 
|  |  | 
|  | int ngx_tcp_push(ngx_socket_t s); | 
|  | #define ngx_tcp_push_n        "tcp_push()" | 
|  |  | 
|  |  | 
|  | #endif /* _NGX_SOCKET_H_INCLUDED_ */ |