Mercurial > hg > nginx
comparison src/os/unix/ngx_freebsd_init.c @ 97:70d2345a903f
nginx-0.0.1-2003-05-29-17:02:09 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 29 May 2003 13:02:09 +0000 |
parents | 8220378432a8 |
children | a059e1aa65d4 |
comparison
equal
deleted
inserted
replaced
96:a23d010f356d | 97:70d2345a903f |
---|---|
1 | 1 |
2 #include <ngx_freebsd_init.h> | 2 #include <ngx_freebsd_init.h> |
3 | 3 |
4 | 4 |
5 /* FreeBSD 3.4 at least */ | |
5 char ngx_freebsd_kern_ostype[20]; | 6 char ngx_freebsd_kern_ostype[20]; |
6 char ngx_freebsd_kern_osrelease[20]; | 7 char ngx_freebsd_kern_osrelease[20]; |
7 int ngx_freebsd_kern_osreldate; | 8 int ngx_freebsd_kern_osreldate; |
8 int ngx_freebsd_hw_ncpu; | 9 int ngx_freebsd_hw_ncpu; |
9 int ngx_freebsd_net_inet_tcp_sendspace; | 10 int ngx_freebsd_net_inet_tcp_sendspace; |
10 int ngx_freebsd_sendfile_nbytes_bug; | 11 int ngx_freebsd_sendfile_nbytes_bug; |
12 | |
13 /* FreeBSD 5.0 */ | |
14 int ngx_freebsd_kern_ipc_zero_copy_send; | |
11 | 15 |
12 | 16 |
13 ngx_os_io_t ngx_os_io = { | 17 ngx_os_io_t ngx_os_io = { |
14 ngx_unix_recv, | 18 ngx_unix_recv, |
15 ngx_readv_chain, | 19 ngx_readv_chain, |
17 ngx_freebsd_sendfile_chain, | 21 ngx_freebsd_sendfile_chain, |
18 NGX_HAVE_SENDFILE|NGX_HAVE_ZEROCOPY | 22 NGX_HAVE_SENDFILE|NGX_HAVE_ZEROCOPY |
19 }; | 23 }; |
20 | 24 |
21 | 25 |
26 typedef struct { | |
27 char *name; | |
28 int *value; | |
29 size_t size; | |
30 } sysctl_t; | |
31 | |
32 | |
33 sysctl_t sysctls[] = { | |
34 {"hw.ncpu", | |
35 &ngx_freebsd_hw_ncpu, | |
36 sizeof(int)}, | |
37 | |
38 {"net.inet.tcp.sendspace", | |
39 &ngx_freebsd_net_inet_tcp_sendspace, | |
40 sizeof(int)}, | |
41 | |
42 {"kern.ipc.zero_copy.send", | |
43 &ngx_freebsd_kern_ipc_zero_copy_send, | |
44 sizeof(int)}, | |
45 | |
46 {NULL, NULL, 0} | |
47 }; | |
48 | |
49 | |
22 int ngx_os_init(ngx_log_t *log) | 50 int ngx_os_init(ngx_log_t *log) |
23 { | 51 { |
24 size_t size; | 52 int i; |
53 size_t size; | |
54 ngx_err_t err; | |
25 | 55 |
26 size = 20; | 56 size = 20; |
27 if (sysctlbyname("kern.ostype", | 57 if (sysctlbyname("kern.ostype", |
28 ngx_freebsd_kern_ostype, &size, NULL, 0) == -1) { | 58 ngx_freebsd_kern_ostype, &size, NULL, 0) == -1) { |
29 ngx_log_error(NGX_LOG_ALERT, log, errno, | 59 ngx_log_error(NGX_LOG_ALERT, log, errno, |
83 #endif | 113 #endif |
84 | 114 |
85 #endif /* HAVE_FREEBSD_SENDFILE */ | 115 #endif /* HAVE_FREEBSD_SENDFILE */ |
86 | 116 |
87 | 117 |
88 size = 4; | 118 for (i = 0; sysctls[i].name; i++) { |
89 if (sysctlbyname("hw.ncpu", &ngx_freebsd_hw_ncpu, &size, NULL, 0) == -1) { | 119 *sysctls[i].value = 0; |
90 ngx_log_error(NGX_LOG_ALERT, log, errno, | 120 size = sysctls[i].size; |
91 "sysctlbyname(hw.ncpu) failed"); | 121 if (sysctlbyname(sysctls[i].name, sysctls[i].value, &size, NULL, 0) |
92 return NGX_ERROR; | 122 == -1) { |
123 err = errno; | |
124 if (err != NGX_ENOENT) { | |
125 ngx_log_error(NGX_LOG_ALERT, log, err, | |
126 "sysctlbyname(%s) failed", sysctls[i].name); | |
127 return NGX_ERROR; | |
128 } | |
129 | |
130 } else { | |
131 ngx_log_error(NGX_LOG_INFO, log, 0, "%s: %d", | |
132 sysctls[i].name, *sysctls[i].value); | |
133 } | |
93 } | 134 } |
94 | |
95 ngx_log_error(NGX_LOG_INFO, log, 0, "hw.ncpu: %d", ngx_freebsd_hw_ncpu); | |
96 | |
97 | |
98 size = 4; | |
99 if (sysctlbyname("net.inet.tcp.sendspace", | |
100 &ngx_freebsd_net_inet_tcp_sendspace, | |
101 &size, NULL, 0) == -1) | |
102 { | |
103 ngx_log_error(NGX_LOG_ALERT, log, errno, | |
104 "sysctlbyname(net.inet.tcp.sendspace) failed"); | |
105 return NGX_ERROR; | |
106 } | |
107 | |
108 ngx_log_error(NGX_LOG_INFO, log, 0, "net.inet.tcp.sendspace: %d", | |
109 ngx_freebsd_net_inet_tcp_sendspace); | |
110 | 135 |
111 return ngx_posix_init(log); | 136 return ngx_posix_init(log); |
112 } | 137 } |