80 |
80 |
81 // ok |
81 // ok |
82 return SUCCESS; |
82 return SUCCESS; |
83 } |
83 } |
84 |
84 |
|
85 err_t signal_ignore (int signum, struct error_info *err) |
|
86 { |
|
87 struct sigaction act = { |
|
88 .sa_handler = SIG_IGN, |
|
89 }; |
|
90 |
|
91 // signall the handler |
|
92 if (sigaction(signum, &act, NULL)) |
|
93 RETURN_SET_ERROR_ERRNO(err, ERR_SIGACTION); |
|
94 |
|
95 // ok |
|
96 return SUCCESS; |
|
97 } |
|
98 |
85 struct signals *signals_default (struct event_base *ev_base) |
99 struct signals *signals_default (struct event_base *ev_base) |
86 { |
100 { |
87 struct signals *signals = NULL; |
101 struct signals *signals = NULL; |
|
102 struct error_info err; |
88 |
103 |
89 // alloc signals |
104 // alloc signals |
90 if (signals_create(&signals, ev_base)) |
105 if (signals_create(&signals, ev_base)) |
91 return NULL; |
106 return NULL; |
92 |
107 |
93 // add the set of default signals |
108 // add the set of default signals |
94 if ( signals_add(signals, SIGPIPE, &signals_ignore, signals) |
109 if (signal_ignore(SIGPIPE, &err)) |
95 || signals_add(signals, SIGINT, &signals_loopexit, signals) |
110 log_err_info(&err, "signal_ignore(SIGPIPE)"); |
96 ) |
111 |
|
112 if ((ERROR_CODE(&err) = signals_add(signals, SIGINT, &signals_loopexit, signals))) { |
|
113 log_err_info(&err, "signals_add(SIGINT)"); |
97 goto error; |
114 goto error; |
98 |
115 } |
|
116 |
99 // ok |
117 // ok |
100 return signals; |
118 return signals; |
101 |
119 |
102 error: |
120 error: |
103 if (signals) |
121 signals_free(signals); |
104 signals_free(signals); |
|
105 |
122 |
106 return NULL; |
123 return NULL; |
107 } |
124 } |
108 |
125 |
109 void signals_free (struct signals *signals) |
126 void signals_free (struct signals *signals) |