diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-06-03 15:42:58 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-06-03 15:42:58 +0000 |
commit | 1c10462e88491d52a23e22fbc3ca0012591df095 (patch) | |
tree | 5a71cf54dda493188473693e5b66a08fc8cdf161 /src/os/win32/ngx_init.c | |
parent | 7578ec9df43bbb31db5291f1b76359d10900a679 (diff) | |
download | nginx-1c10462e88491d52a23e22fbc3ca0012591df095.tar.gz nginx-1c10462e88491d52a23e22fbc3ca0012591df095.zip |
nginx-0.0.1-2003-06-03-19:42:58 import
Diffstat (limited to 'src/os/win32/ngx_init.c')
-rw-r--r-- | src/os/win32/ngx_init.c | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/src/os/win32/ngx_init.c b/src/os/win32/ngx_init.c index 4f356a1c2..529233046 100644 --- a/src/os/win32/ngx_init.c +++ b/src/os/win32/ngx_init.c @@ -14,11 +14,73 @@ ngx_os_io_t ngx_os_io = { }; +/* Should these pointers be per protocol ? */ +LPFN_ACCEPTEX acceptex; +LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs; +LPFN_TRANSMITFILE transmitfile; + +static GUID ae_guid = WSAID_ACCEPTEX; +static GUID as_guid = WSAID_GETACCEPTEXSOCKADDRS; +static GUID tf_guid = WSAID_TRANSMITFILE; + + int ngx_os_init(ngx_log_t *log) { - if (ngx_init_sockets(log) == NGX_ERROR) { + DWORD bytes; + SOCKET s; + WSADATA wsd; + + /* init Winsock */ + + if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + "WSAStartup failed"); + return NGX_ERROR; + } + + ngx_log_error(NGX_LOG_INFO, log, 0, "max sockets: %d", wsd.iMaxSockets); + + /* get AcceptEx(), GetAcceptExSockAddrs() and TransmitFile() addresses */ + + s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0); + if (s == -1) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + ngx_socket_n " %s falied"); return NGX_ERROR; } + if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &ae_guid, sizeof(GUID), + &acceptex, sizeof(LPFN_ACCEPTEX), &bytes, NULL, NULL) == -1) { + + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, " + "WSAID_ACCEPTEX) failed"); + return NGX_ERROR; + } + + if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &as_guid, sizeof(GUID), + &getacceptexsockaddrs, sizeof(LPFN_GETACCEPTEXSOCKADDRS), + &bytes, NULL, NULL) == -1) { + + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, " + "WSAID_ACCEPTEX) failed"); + return NGX_ERROR; + } + + if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tf_guid, sizeof(GUID), + &transmitfile, sizeof(LPFN_TRANSMITFILE), &bytes, + NULL, NULL) == -1) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, + "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, " + "WSAID_TRANSMITFILE) failed"); + return NGX_ERROR; + } + + if (ngx_close_socket(s) == -1) { + ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno, + ngx_close_socket_n " failed"); + } + return NGX_OK; } |