Mercurial > hg > nginx
diff src/os/win32/ngx_win32_init.c @ 1633:74b2a52bc3c9
TransmitPackets(), ConnectEx(), and DisconnectEx()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 11 Nov 2007 18:56:50 +0000 |
parents | 201d017ea470 |
children | 0b592a68aade |
line wrap: on
line diff
--- a/src/os/win32/ngx_win32_init.c +++ b/src/os/win32/ngx_win32_init.c @@ -39,13 +39,19 @@ static u_int osviex; static OSVERSIONINFOEX osvi; /* Should these pointers be per protocol ? */ -LPFN_ACCEPTEX acceptex; -LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs; -LPFN_TRANSMITFILE transmitfile; +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 ae_guid = WSAID_ACCEPTEX; +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; ngx_int_t ngx_os_init(ngx_log_t *log) @@ -84,6 +90,7 @@ ngx_int_t ngx_os_init(ngx_log_t *log) * Windows 2000 250000 * Windows XP 250100 * Windows 2003 250200 + * Windows Vista/2008 260000 * * Windows CE x.x 3xxxxx */ @@ -121,7 +128,10 @@ ngx_int_t ngx_os_init(ngx_log_t *log) /* STUB: ngx_uint_t max */ ngx_max_wsabufs = 1024 * 1024; - /* get AcceptEx(), GetAcceptExSockAddrs() and TransmitFile() addresses */ + /* + * get AcceptEx(), GetAcceptExSockAddrs(), TransmitFile(), + * TransmitPackets(), ConnectEx(), and DisconnectEx() addresses + */ s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if (s == -1) { @@ -130,32 +140,63 @@ ngx_int_t ngx_os_init(ngx_log_t *log) 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, + 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"); - 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, + &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_ACCEPTEX) failed"); - return NGX_ERROR; + "WSAID_GETACCEPTEXSOCKADDRS) failed"); } 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, + &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"); - return NGX_ERROR; + } + + 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) {