Mercurial > hg > nginx-quic
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"); |