Mercurial > hg > nginx
diff src/os/unix/ngx_process_cycle.c @ 366:e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 23 Jun 2004 15:18:17 +0000 |
parents | fd24ba70e1b3 |
children | 54f76b0b8dca |
line wrap: on
line diff
--- a/src/os/unix/ngx_process_cycle.c Wed Jun 23 05:54:27 2004 +0000 +++ b/src/os/unix/ngx_process_cycle.c Wed Jun 23 15:18:17 2004 +0000 @@ -2,8 +2,7 @@ #include <ngx_config.h> #include <ngx_core.h> #include <ngx_event.h> - -#include <nginx.h> +#include <ngx_channel.h> static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, @@ -34,6 +33,7 @@ sig_atomic_t ngx_change_binary; ngx_pid_t ngx_new_binary; ngx_uint_t ngx_inherited; +ngx_uint_t ngx_daemonized; sig_atomic_t ngx_noaccept; ngx_uint_t ngx_noaccepting; @@ -609,37 +609,11 @@ ngx_last_process = 0; #endif - c = &cycle->connections[ngx_channel]; - ngx_memzero(c, sizeof(ngx_connection_t)); - - c->fd = ngx_channel; - c->pool = cycle->pool; - c->read = &cycle->read_events[ngx_channel]; - c->write = &cycle->write_events[ngx_channel]; - - ngx_memzero(c->read, sizeof(ngx_event_t)); - ngx_memzero(c->write, sizeof(ngx_event_t)); - - c->log = cycle->log; - c->read->log = cycle->log; - c->write->log = cycle->log; - c->read->index = NGX_INVALID_INDEX; - c->write->index = NGX_INVALID_INDEX; - c->read->data = c; - c->write->data = c; - c->read->event_handler = ngx_channel_handler; - - if (ngx_add_conn) { - if (ngx_add_conn(c) == NGX_ERROR) { - /* fatal */ - exit(2); - } - - } else { - if (ngx_add_event(c->read, NGX_READ_EVENT, 0) == NGX_ERROR) { - /* fatal */ - exit(2); - } + if (ngx_add_channel_event(cycle, ngx_channel, NGX_READ_EVENT, + ngx_channel_handler) == NGX_ERROR) + { + /* fatal */ + exit(2); } ngx_setproctitle("worker process"); @@ -813,165 +787,3 @@ } #endif - - -ngx_int_t ngx_write_channel(ngx_socket_t s, ngx_channel_t *ch, size_t size, - ngx_log_t *log) -{ - ssize_t n; - ngx_err_t err; - struct iovec iov[1]; - struct msghdr msg; - -#if (HAVE_MSGHDR_MSG_CONTROL) - - union { - struct cmsghdr cm; - char space[CMSG_SPACE(sizeof(int))]; - } cmsg; - - if (ch->fd == -1) { - msg.msg_control = NULL; - msg.msg_controllen = 0; - - } else { - msg.msg_control = (caddr_t) &cmsg; - msg.msg_controllen = sizeof(cmsg); - - cmsg.cm.cmsg_len = sizeof(cmsg); - cmsg.cm.cmsg_level = SOL_SOCKET; - cmsg.cm.cmsg_type = SCM_RIGHTS; - *(int *) CMSG_DATA(&cmsg.cm) = ch->fd; - } - -#else - - if (ch->fd == -1) { - msg.msg_accrights = NULL; - msg.msg_accrightslen = 0; - - } else { - msg.msg_accrights = (caddr_t) &ch->fd; - msg.msg_accrightslen = sizeof(int); - } - -#endif - - iov[0].iov_base = (char *) ch; - iov[0].iov_len = size; - - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_iov = iov; - msg.msg_iovlen = 1; - - n = sendmsg(s, &msg, 0); - - if (n == -1) { - err = ngx_errno; - if (err == NGX_EAGAIN) { - return NGX_AGAIN; - } - - ngx_log_error(NGX_LOG_ALERT, log, err, "sendmsg() failed"); - return NGX_ERROR; - } - - return NGX_OK; -} - - -ngx_int_t ngx_read_channel(ngx_socket_t s, ngx_channel_t *ch, size_t size, - ngx_log_t *log) -{ - ssize_t n; - ngx_err_t err; - struct iovec iov[1]; - struct msghdr msg; - -#if (HAVE_MSGHDR_MSG_CONTROL) - union { - struct cmsghdr cm; - char space[CMSG_SPACE(sizeof(int))]; - } cmsg; -#else - int fd; -#endif - - iov[0].iov_base = (char *) ch; - iov[0].iov_len = size; - - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_iov = iov; - msg.msg_iovlen = 1; - -#if (HAVE_MSGHDR_MSG_CONTROL) - msg.msg_control = (caddr_t) &cmsg; - msg.msg_controllen = sizeof(cmsg); -#else - msg.msg_accrights = (caddr_t) &fd; - msg.msg_accrightslen = sizeof(int); -#endif - - n = recvmsg(s, &msg, 0); - - if (n == -1) { - err = ngx_errno; - if (err == NGX_EAGAIN) { - return NGX_AGAIN; - } - - ngx_log_error(NGX_LOG_ALERT, log, err, "recvmsg() failed"); - return NGX_ERROR; - } - - if ((size_t) n < sizeof(ngx_channel_t)) { - ngx_log_error(NGX_LOG_ALERT, log, 0, - "recvmsg() returned not enough data"); - return NGX_ERROR; - } - -#if (HAVE_MSGHDR_MSG_CONTROL) - - if (ch->command == NGX_CMD_OPEN_CHANNEL) { - - if (cmsg.cm.cmsg_len < sizeof(cmsg)) { - ngx_log_error(NGX_LOG_ALERT, log, 0, - "recvmsg() returned too small ancillary data"); - return NGX_ERROR; - } - - if (cmsg.cm.cmsg_level != SOL_SOCKET || cmsg.cm.cmsg_type != SCM_RIGHTS) - { - ngx_log_error(NGX_LOG_ALERT, log, 0, - "recvmsg() returned invalid ancillary data " - "level %d or type %d", - cmsg.cm.cmsg_level, cmsg.cm.cmsg_type); - return NGX_ERROR; - } - - ch->fd = *(int *) CMSG_DATA(&cmsg.cm); - } - - if (msg.msg_flags & (MSG_TRUNC|MSG_CTRUNC)) { - ngx_log_error(NGX_LOG_ALERT, log, 0, - "recvmsg() truncated data"); - } - -#else - - if (ch->command == NGX_CMD_OPEN_CHANNEL) { - if (msg.msg_accrightslen != sizeof(int)) { - ngx_log_error(NGX_LOG_ALERT, log, 0, - "recvmsg() returned no ancillary data"); - return NGX_ERROR; - } - - ch->fd = fd; - } - -#endif - - return n; -}