comparison 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
comparison
equal deleted inserted replaced
1632:2142e5cf62da 1633:74b2a52bc3c9
37 37
38 static u_int osviex; 38 static u_int osviex;
39 static OSVERSIONINFOEX osvi; 39 static OSVERSIONINFOEX osvi;
40 40
41 /* Should these pointers be per protocol ? */ 41 /* Should these pointers be per protocol ? */
42 LPFN_ACCEPTEX acceptex; 42 LPFN_ACCEPTEX ngx_acceptex;
43 LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs; 43 LPFN_GETACCEPTEXSOCKADDRS ngx_getacceptexsockaddrs;
44 LPFN_TRANSMITFILE transmitfile; 44 LPFN_TRANSMITFILE ngx_transmitfile;
45 45 LPFN_TRANSMITPACKETS ngx_transmitpackets;
46 static GUID ae_guid = WSAID_ACCEPTEX; 46 LPFN_CONNECTEX ngx_connectex;
47 LPFN_DISCONNECTEX ngx_disconnectex;
48
49 static GUID ax_guid = WSAID_ACCEPTEX;
47 static GUID as_guid = WSAID_GETACCEPTEXSOCKADDRS; 50 static GUID as_guid = WSAID_GETACCEPTEXSOCKADDRS;
48 static GUID tf_guid = WSAID_TRANSMITFILE; 51 static GUID tf_guid = WSAID_TRANSMITFILE;
52 static GUID tp_guid = WSAID_TRANSMITPACKETS;
53 static GUID cx_guid = WSAID_CONNECTEX;
54 static GUID dx_guid = WSAID_DISCONNECTEX;
49 55
50 56
51 ngx_int_t ngx_os_init(ngx_log_t *log) 57 ngx_int_t ngx_os_init(ngx_log_t *log)
52 { 58 {
53 DWORD bytes; 59 DWORD bytes;
82 * Windows NT 4.0 240000 88 * Windows NT 4.0 240000
83 * Windows NT 4.0 SP5 240050 89 * Windows NT 4.0 SP5 240050
84 * Windows 2000 250000 90 * Windows 2000 250000
85 * Windows XP 250100 91 * Windows XP 250100
86 * Windows 2003 250200 92 * Windows 2003 250200
93 * Windows Vista/2008 260000
87 * 94 *
88 * Windows CE x.x 3xxxxx 95 * Windows CE x.x 3xxxxx
89 */ 96 */
90 97
91 ngx_win32_version = osvi.dwPlatformId * 100000 98 ngx_win32_version = osvi.dwPlatformId * 100000
119 } 126 }
120 127
121 /* STUB: ngx_uint_t max */ 128 /* STUB: ngx_uint_t max */
122 ngx_max_wsabufs = 1024 * 1024; 129 ngx_max_wsabufs = 1024 * 1024;
123 130
124 /* get AcceptEx(), GetAcceptExSockAddrs() and TransmitFile() addresses */ 131 /*
132 * get AcceptEx(), GetAcceptExSockAddrs(), TransmitFile(),
133 * TransmitPackets(), ConnectEx(), and DisconnectEx() addresses
134 */
125 135
126 s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP); 136 s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
127 if (s == -1) { 137 if (s == -1) {
128 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, 138 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
129 ngx_socket_n " falied"); 139 ngx_socket_n " falied");
130 return NGX_ERROR; 140 return NGX_ERROR;
131 } 141 }
132 142
133 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &ae_guid, sizeof(GUID), 143 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &ax_guid, sizeof(GUID),
134 &acceptex, sizeof(LPFN_ACCEPTEX), &bytes, NULL, NULL) == -1) { 144 &ngx_acceptex, sizeof(LPFN_ACCEPTEX), &bytes, NULL, NULL)
135 145 == -1)
136 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, 146 {
147 ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
137 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, " 148 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
138 "WSAID_ACCEPTEX) failed"); 149 "WSAID_ACCEPTEX) failed");
139 return NGX_ERROR;
140 } 150 }
141 151
142 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &as_guid, sizeof(GUID), 152 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &as_guid, sizeof(GUID),
143 &getacceptexsockaddrs, sizeof(LPFN_GETACCEPTEXSOCKADDRS), 153 &ngx_getacceptexsockaddrs, sizeof(LPFN_GETACCEPTEXSOCKADDRS),
144 &bytes, NULL, NULL) == -1) { 154 &bytes, NULL, NULL)
145 155 == -1)
146 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, 156 {
147 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, " 157 ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
148 "WSAID_ACCEPTEX) failed"); 158 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
149 return NGX_ERROR; 159 "WSAID_GETACCEPTEXSOCKADDRS) failed");
150 } 160 }
151 161
152 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tf_guid, sizeof(GUID), 162 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tf_guid, sizeof(GUID),
153 &transmitfile, sizeof(LPFN_TRANSMITFILE), &bytes, 163 &ngx_transmitfile, sizeof(LPFN_TRANSMITFILE), &bytes,
154 NULL, NULL) == -1) { 164 NULL, NULL)
155 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, 165 == -1)
166 {
167 ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
156 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, " 168 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
157 "WSAID_TRANSMITFILE) failed"); 169 "WSAID_TRANSMITFILE) failed");
158 return NGX_ERROR; 170 }
171
172 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tp_guid, sizeof(GUID),
173 &ngx_transmitpackets, sizeof(LPFN_TRANSMITPACKETS), &bytes,
174 NULL, NULL)
175 == -1)
176 {
177 ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
178 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
179 "WSAID_TRANSMITPACKETS) failed");
180 }
181
182 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &cx_guid, sizeof(GUID),
183 &ngx_connectex, sizeof(LPFN_CONNECTEX), &bytes,
184 NULL, NULL)
185 == -1)
186 {
187 ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
188 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
189 "WSAID_CONNECTEX) failed");
190 }
191
192 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &dx_guid, sizeof(GUID),
193 &ngx_disconnectex, sizeof(LPFN_DISCONNECTEX), &bytes,
194 NULL, NULL)
195 == -1)
196 {
197 ngx_log_error(NGX_LOG_NOTICE, log, ngx_socket_errno,
198 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
199 "WSAID_DISCONNECTEX) failed");
159 } 200 }
160 201
161 if (ngx_close_socket(s) == -1) { 202 if (ngx_close_socket(s) == -1) {
162 ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno, 203 ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
163 ngx_close_socket_n " failed"); 204 ngx_close_socket_n " failed");