Mercurial > hg > nginx-ranges
view src/os/unix/ngx_darwin_init.c @ 520:24b676623d4f NGINX_0_8_7
nginx 0.8.7
*) Change: minimum supported OpenSSL version is 0.9.7.
*) Change: the "ask" parameter of the "ssl_verify_client" directive was
changed to the "optional" parameter and now it checks a client
certificate if it was offered.
Thanks to Brice Figureau.
*) Feature: the $ssl_client_verify variable.
Thanks to Brice Figureau.
*) Feature: the "ssl_crl" directive.
Thanks to Brice Figureau.
*) Feature: the "proxy" parameter of the "geo" directive.
*) Feature: the "image_filter" directive supports variables for setting
size.
*) Bugfix: the $ssl_client_cert variable usage corrupted memory; the
bug had appeared in 0.7.7.
Thanks to Sergey Zhuravlev.
*) Bugfix: "proxy_pass_header" and "fastcgi_pass_header" directives did
not pass to a client the "X-Accel-Redirect", "X-Accel-Limit-Rate",
"X-Accel-Buffering", and "X-Accel-Charset" lines from backend
response header.
Thanks to Maxim Dounin.
*) Bugfix: in handling "Last-Modified" and "Accept-Ranges" backend
response header lines; the bug had appeared in 0.7.44.
Thanks to Maxim Dounin.
*) Bugfix: the "[alert] zero size buf" error if subrequest returns an
empty response; the bug had appeared in 0.8.5.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 27 Jul 2009 00:00:00 +0400 |
parents | ff86d646f9df |
children |
line wrap: on
line source
/* * Copyright (C) Igor Sysoev */ #include <ngx_config.h> #include <ngx_core.h> char ngx_darwin_kern_ostype[16]; char ngx_darwin_kern_osrelease[128]; int ngx_darwin_hw_ncpu; int ngx_darwin_kern_ipc_somaxconn; u_long ngx_darwin_net_inet_tcp_sendspace; static ngx_os_io_t ngx_darwin_io = { ngx_unix_recv, ngx_readv_chain, ngx_udp_unix_recv, ngx_unix_send, #if (NGX_HAVE_SENDFILE) ngx_darwin_sendfile_chain, NGX_IO_SENDFILE #else ngx_writev_chain, 0 #endif }; typedef struct { char *name; void *value; size_t size; ngx_uint_t exists; } sysctl_t; sysctl_t sysctls[] = { { "hw.ncpu", &ngx_darwin_hw_ncpu, sizeof(ngx_darwin_hw_ncpu), 0 }, { "net.inet.tcp.sendspace", &ngx_darwin_net_inet_tcp_sendspace, sizeof(ngx_darwin_net_inet_tcp_sendspace), 0 }, { "kern.ipc.somaxconn", &ngx_darwin_kern_ipc_somaxconn, sizeof(ngx_darwin_kern_ipc_somaxconn), 0 }, { NULL, NULL, 0, 0 } }; ngx_int_t ngx_os_specific_init(ngx_log_t *log) { int somaxconn; size_t size; ngx_err_t err; ngx_uint_t i; size = sizeof(ngx_darwin_kern_ostype); if (sysctlbyname("kern.ostype", ngx_darwin_kern_ostype, &size, NULL, 0) == -1) { err = ngx_errno; if (err != NGX_ENOENT) { ngx_log_error(NGX_LOG_ALERT, log, err, "sysctlbyname(kern.ostype) failed"); if (err != NGX_ENOMEM) { return NGX_ERROR; } ngx_darwin_kern_ostype[size - 1] = '\0'; } } size = sizeof(ngx_darwin_kern_osrelease); if (sysctlbyname("kern.osrelease", ngx_darwin_kern_osrelease, &size, NULL, 0) == -1) { err = ngx_errno; if (err != NGX_ENOENT) { ngx_log_error(NGX_LOG_ALERT, log, err, "sysctlbyname(kern.osrelease) failed"); if (err != NGX_ENOMEM) { return NGX_ERROR; } ngx_darwin_kern_osrelease[size - 1] = '\0'; } } for (i = 0; sysctls[i].name; i++) { size = sysctls[i].size; if (sysctlbyname(sysctls[i].name, sysctls[i].value, &size, NULL, 0) == 0) { sysctls[i].exists = 1; continue; } err = ngx_errno; if (err == NGX_ENOENT) { continue; } ngx_log_error(NGX_LOG_ALERT, log, err, "sysctlbyname(%s) failed", sysctls[i].name); return NGX_ERROR; } ngx_ncpu = ngx_darwin_hw_ncpu; somaxconn = 32676; if (ngx_darwin_kern_ipc_somaxconn > somaxconn) { ngx_log_error(NGX_LOG_ALERT, log, 0, "sysctl kern.ipc.somaxconn must be no more than %d", somaxconn); return NGX_ERROR; } ngx_tcp_nodelay_and_tcp_nopush = 1; ngx_os_io = ngx_darwin_io; return NGX_OK; } void ngx_os_specific_status(ngx_log_t *log) { u_long value; ngx_uint_t i; if (ngx_darwin_kern_ostype[0]) { ngx_log_error(NGX_LOG_NOTICE, log, 0, "OS: %s %s", ngx_darwin_kern_ostype, ngx_darwin_kern_osrelease); } for (i = 0; sysctls[i].name; i++) { if (sysctls[i].exists) { if (sysctls[i].size == sizeof(long)) { value = *(long *) sysctls[i].value; } else { value = *(int *) sysctls[i].value; } ngx_log_error(NGX_LOG_NOTICE, log, 0, "%s: %l", sysctls[i].name, value); } } }