comparison src/os/win32/ngx_socket.c @ 100:7ebc8b7fb816

nginx-0.0.1-2003-06-03-19:42:58 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 03 Jun 2003 15:42:58 +0000
parents 50186b49f2ad
children da8c5707af39
comparison
equal deleted inserted replaced
99:a059e1aa65d4 100:7ebc8b7fb816
1 1
2 #include <ngx_config.h> 2 #include <ngx_config.h>
3 #include <ngx_core.h>
3 4
4 #include <ngx_core.h>
5 #include <ngx_log.h>
6 #include <ngx_errno.h>
7 #include <ngx_socket.h>
8
9
10 /* These pointers should be per protocol ? */
11 LPFN_ACCEPTEX acceptex;
12 LPFN_GETACCEPTEXSOCKADDRS getacceptexsockaddrs;
13 LPFN_TRANSMITFILE transmitfile;
14
15 static GUID ae_guid = WSAID_ACCEPTEX;
16 static GUID as_guid = WSAID_GETACCEPTEXSOCKADDRS;
17 static GUID tf_guid = WSAID_TRANSMITFILE;
18
19
20 int ngx_init_sockets(ngx_log_t *log)
21 {
22 DWORD bytes;
23 SOCKET s;
24 WSADATA wsd;
25
26 if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
27 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
28 "WSAStartup failed");
29 return NGX_ERROR;
30 }
31
32 s = ngx_socket(AF_INET, SOCK_STREAM, IPPROTO_IP, 0);
33 if (s == -1) {
34 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
35 ngx_socket_n " %s falied");
36 return NGX_ERROR;
37 }
38
39 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &ae_guid, sizeof(GUID),
40 &acceptex, sizeof(LPFN_ACCEPTEX), &bytes, NULL, NULL) == -1) {
41
42 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
43 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
44 "WSAID_ACCEPTEX) failed");
45 return NGX_ERROR;
46 }
47
48 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &as_guid, sizeof(GUID),
49 &getacceptexsockaddrs, sizeof(LPFN_GETACCEPTEXSOCKADDRS),
50 &bytes, NULL, NULL) == -1) {
51
52 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
53 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
54 "WSAID_ACCEPTEX) failed");
55 return NGX_ERROR;
56 }
57
58 if (WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER, &tf_guid, sizeof(GUID),
59 &transmitfile, sizeof(LPFN_TRANSMITFILE), &bytes,
60 NULL, NULL) == -1) {
61 ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
62 "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER, "
63 "WSAID_TRANSMITFILE) failed");
64 return NGX_ERROR;
65 }
66
67 if (ngx_close_socket(s) == -1) {
68 ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
69 ngx_close_socket_n " failed");
70 }
71
72 return NGX_OK;
73 }
74 5
75 int ngx_nonblocking(ngx_socket_t s) 6 int ngx_nonblocking(ngx_socket_t s)
76 { 7 {
77 unsigned long nb = 1; 8 unsigned long nb = 1;
78 9
79 return ioctlsocket(s, FIONBIO, &nb); 10 return ioctlsocket(s, FIONBIO, &nb);
80 } 11 }
81 12
13
82 int ngx_blocking(ngx_socket_t s) 14 int ngx_blocking(ngx_socket_t s)
83 { 15 {
84 unsigned long nb = 0; 16 unsigned long nb = 0;
85 17
86 return ioctlsocket(s, FIONBIO, &nb); 18 return ioctlsocket(s, FIONBIO, &nb);