annotate src/os/unix/ngx_posix_init.c @ 191:71ce40b3c37b

nginx-0.0.1-2003-11-19-19:26:41 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 19 Nov 2003 16:26:41 +0000
parents 4c698194c56d
children 8dee38ea9117
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 #include <ngx_config.h>
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 #include <ngx_core.h>
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 int ngx_max_sockets;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 int ngx_inherited_nonblocking;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
10 void ngx_restart_signal_handler(int signo);
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
11 void ngx_rotate_signal_handler(int signo);
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
12
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
13
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 int ngx_posix_init(ngx_log_t *log)
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 {
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
16 struct rlimit rlmt;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
17 struct sigaction sa;
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 ngx_memzero(&sa, sizeof(struct sigaction));
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 sa.sa_handler = SIG_IGN;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 sigemptyset(&sa.sa_mask);
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 if (sigaction(SIGPIPE, &sa, NULL) == -1) {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 "sigaction(SIGPIPE, SIG_IGN) failed");
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 return NGX_ERROR;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
28 ngx_memzero(&sa, sizeof(struct sigaction));
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
29 sa.sa_handler = ngx_sigchld_handler;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
30 sigemptyset(&sa.sa_mask);
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
31 if (sigaction(SIGCHLD, &sa, NULL) == -1) {
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
32 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
33 "sigaction(SIGCHLD) failed");
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
34 return NGX_ERROR;
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
35 }
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 183
diff changeset
36
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
37 sa.sa_handler = ngx_restart_signal_handler;
116
571bcbff82c5 nginx-0.0.1-2003-07-11-08:50:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 111
diff changeset
38 if (sigaction(ngx_signal_value(NGX_RESTART_SIGNAL), &sa, NULL) == -1) {
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
39 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
116
571bcbff82c5 nginx-0.0.1-2003-07-11-08:50:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 111
diff changeset
40 "sigaction(SIG" ngx_value(NGX_RESTART_SIGNAL) ") failed");
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
41 return NGX_ERROR;
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
42 }
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
43
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
44 sa.sa_handler = ngx_rotate_signal_handler;
116
571bcbff82c5 nginx-0.0.1-2003-07-11-08:50:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 111
diff changeset
45 if (sigaction(ngx_signal_value(NGX_ROTATE_SIGNAL), &sa, NULL) == -1) {
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
46 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
116
571bcbff82c5 nginx-0.0.1-2003-07-11-08:50:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 111
diff changeset
47 "sigaction(SIG" ngx_value(NGX_ROTATE_SIGNAL) ") failed");
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
48 return NGX_ERROR;
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
49 }
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
50
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 ngx_log_error(NGX_LOG_ALERT, log, errno,
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 "getrlimit(RLIMIT_NOFILE) failed)");
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 return NGX_ERROR;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 ngx_log_error(NGX_LOG_INFO, log, 0,
183
4c698194c56d nginx-0.0.1-2003-11-13-19:16:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 116
diff changeset
59 "getrlimit(RLIMIT_NOFILE): " RLIM_FMT ":" RLIM_FMT,
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 rlmt.rlim_cur, rlmt.rlim_max);
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 ngx_max_sockets = rlmt.rlim_cur;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 #if (HAVE_INHERITED_NONBLOCK)
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 ngx_inherited_nonblocking = 1;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 #else
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 ngx_inherited_nonblocking = 0;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 #endif
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 return NGX_OK;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73
111
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
74 void ngx_restart_signal_handler(int signo)
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
75 {
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
76 restart = 1;
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
77 }
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
78
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
79
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
80 void ngx_rotate_signal_handler(int signo)
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
81 {
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
82 rotate = 1;
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
83 }
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
84
1c002f2b77ed nginx-0.0.1-2003-07-03-20:30:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
85
93
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 int ngx_posix_post_conf_init(ngx_log_t *log)
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 ngx_fd_t pp[2];
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 if (pipe(pp) == -1) {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "pipe() failed");
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 return NGX_ERROR;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 if (dup2(pp[1], STDERR_FILENO) == -1) {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 ngx_log_error(NGX_LOG_EMERG, log, errno, "dup2(STDERR) failed");
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 return NGX_ERROR;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 if (pp[1] > STDERR_FILENO) {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 if (close(pp[1]) == -1) {
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 ngx_log_error(NGX_LOG_EMERG, log, errno, "close() failed");
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 return NGX_ERROR;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 }
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 return NGX_OK;
738fe44c70d5 nginx-0.0.1-2003-05-21-17:28:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 }