diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-05-29 13:02:09 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-05-29 13:02:09 +0000 |
commit | 1393325df8b1f530bf5c257fde39c26e8333d8d7 (patch) | |
tree | fa29f174c74ea518d2115bc069df3789c6e62622 /src/os/unix/ngx_freebsd_init.c | |
parent | 6253ca1b62c24bbac8c380d4ae64353b671ad7ef (diff) | |
download | nginx-1393325df8b1f530bf5c257fde39c26e8333d8d7.tar.gz nginx-1393325df8b1f530bf5c257fde39c26e8333d8d7.zip |
nginx-0.0.1-2003-05-29-17:02:09 import
Diffstat (limited to 'src/os/unix/ngx_freebsd_init.c')
-rw-r--r-- | src/os/unix/ngx_freebsd_init.c | 69 |
1 files changed, 47 insertions, 22 deletions
diff --git a/src/os/unix/ngx_freebsd_init.c b/src/os/unix/ngx_freebsd_init.c index 100dfc475..cacc4579f 100644 --- a/src/os/unix/ngx_freebsd_init.c +++ b/src/os/unix/ngx_freebsd_init.c @@ -2,6 +2,7 @@ #include <ngx_freebsd_init.h> +/* FreeBSD 3.4 at least */ char ngx_freebsd_kern_ostype[20]; char ngx_freebsd_kern_osrelease[20]; int ngx_freebsd_kern_osreldate; @@ -9,6 +10,9 @@ int ngx_freebsd_hw_ncpu; int ngx_freebsd_net_inet_tcp_sendspace; int ngx_freebsd_sendfile_nbytes_bug; +/* FreeBSD 5.0 */ +int ngx_freebsd_kern_ipc_zero_copy_send; + ngx_os_io_t ngx_os_io = { ngx_unix_recv, @@ -19,9 +23,35 @@ ngx_os_io_t ngx_os_io = { }; +typedef struct { + char *name; + int *value; + size_t size; +} sysctl_t; + + +sysctl_t sysctls[] = { + {"hw.ncpu", + &ngx_freebsd_hw_ncpu, + sizeof(int)}, + + {"net.inet.tcp.sendspace", + &ngx_freebsd_net_inet_tcp_sendspace, + sizeof(int)}, + + {"kern.ipc.zero_copy.send", + &ngx_freebsd_kern_ipc_zero_copy_send, + sizeof(int)}, + + {NULL, NULL, 0} +}; + + int ngx_os_init(ngx_log_t *log) { - size_t size; + int i; + size_t size; + ngx_err_t err; size = 20; if (sysctlbyname("kern.ostype", @@ -85,28 +115,23 @@ int ngx_os_init(ngx_log_t *log) #endif /* HAVE_FREEBSD_SENDFILE */ - size = 4; - if (sysctlbyname("hw.ncpu", &ngx_freebsd_hw_ncpu, &size, NULL, 0) == -1) { - ngx_log_error(NGX_LOG_ALERT, log, errno, - "sysctlbyname(hw.ncpu) failed"); - return NGX_ERROR; - } - - ngx_log_error(NGX_LOG_INFO, log, 0, "hw.ncpu: %d", ngx_freebsd_hw_ncpu); - - - size = 4; - if (sysctlbyname("net.inet.tcp.sendspace", - &ngx_freebsd_net_inet_tcp_sendspace, - &size, NULL, 0) == -1) - { - ngx_log_error(NGX_LOG_ALERT, log, errno, - "sysctlbyname(net.inet.tcp.sendspace) failed"); - return NGX_ERROR; + for (i = 0; sysctls[i].name; i++) { + *sysctls[i].value = 0; + size = sysctls[i].size; + if (sysctlbyname(sysctls[i].name, sysctls[i].value, &size, NULL, 0) + == -1) { + err = errno; + if (err != NGX_ENOENT) { + ngx_log_error(NGX_LOG_ALERT, log, err, + "sysctlbyname(%s) failed", sysctls[i].name); + return NGX_ERROR; + } + + } else { + ngx_log_error(NGX_LOG_INFO, log, 0, "%s: %d", + sysctls[i].name, *sysctls[i].value); + } } - ngx_log_error(NGX_LOG_INFO, log, 0, "net.inet.tcp.sendspace: %d", - ngx_freebsd_net_inet_tcp_sendspace); - return ngx_posix_init(log); } |