aboutsummaryrefslogtreecommitdiff
path: root/src/os/win32/ngx_init.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2003-06-03 15:42:58 +0000
committerIgor Sysoev <igor@sysoev.ru>2003-06-03 15:42:58 +0000
commit1c10462e88491d52a23e22fbc3ca0012591df095 (patch)
tree5a71cf54dda493188473693e5b66a08fc8cdf161 /src/os/win32/ngx_init.c
parent7578ec9df43bbb31db5291f1b76359d10900a679 (diff)
downloadnginx-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.c64
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;
}