Changes in / [709c3bc:21477e9] in code
Legend:
- Unmodified
- Added
- Removed
-
icbd.c
r709c3bc r21477e9 56 56 void getpeerinfo(struct icb_session *); 57 57 void icbd_accept(int, short, void *); 58 void icbd_paused(int, short, void *);59 58 void icbd_drop(struct icb_session *, char *); 60 59 void icbd_ioerr(struct bufferevent *, short, void *); … … 72 71 RB_GENERATE(icbd_sessions, icb_session, node, icbd_session_cmp); 73 72 74 struct icbd_listener {75 struct event ev, pause;76 };77 78 73 int 79 74 main(int argc, char *argv[]) … … 151 146 for (ch = 0; ch < argc; ch++) { 152 147 struct addrinfo hints, *res, *res0; 153 struct icbd_listener *l;148 struct event *ev; 154 149 char *addr, *port; 155 150 int error, s, on = 1; … … 201 196 (void)listen(s, TCP_BACKLOG); 202 197 203 if (( l = calloc(1, sizeof *l)) == NULL)198 if ((ev = calloc(1, sizeof *ev)) == NULL) 204 199 err(EX_UNAVAILABLE, NULL); 205 event_set( &l->ev, s, EV_READ | EV_PERSIST, icbd_accept, l);206 if (event_add( &l->ev, NULL) < 0) {200 event_set(ev, s, EV_READ | EV_PERSIST, icbd_accept, ev); 201 if (event_add(ev, NULL) < 0) { 207 202 syslog(LOG_ERR, "event_add: %m"); 208 203 return (EX_UNAVAILABLE); 209 204 } 210 evtimer_set(&l->pause, icbd_paused, l);211 205 212 206 nsocks++; … … 261 255 void 262 256 icbd_accept(int fd, short event __attribute__((__unused__)), 263 void *arg) 264 { 265 struct icbd_listener *l = arg; 257 void *arg __attribute__((__unused__))) 258 { 266 259 struct sockaddr_storage ss; 267 struct timeval p = { 1, 0 };268 260 struct icb_session *is; 269 261 socklen_t ss_len = sizeof ss; … … 271 263 272 264 ss.ss_len = ss_len; 273 s = accept(fd, (struct sockaddr *)&ss, &ss_len); 274 if (s == -1) { 275 switch (errno) { 276 case EINTR: 277 case EWOULDBLOCK: 278 case ECONNABORTED: 279 return; 280 case EMFILE: 281 case ENFILE: 282 event_del(&l->ev); 283 evtimer_add(&l->pause, &p); 284 return; 285 default: 286 syslog(LOG_ERR, "accept: %m"); 287 return; 288 } 289 } 290 265 if ((s = accept(fd, (struct sockaddr *)&ss, &ss_len)) < 0) { 266 syslog(LOG_ERR, "accept: %m"); 267 return; 268 } 291 269 if (ss.ss_family == AF_INET) 292 270 if (setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof tos) < 0) … … 322 300 /* start icb conversation */ 323 301 icb_start(is); 324 }325 326 void327 icbd_paused(int fd __attribute__((__unused__)),328 short events __attribute__((__unused__)), void *arg)329 {330 struct icbd_listener *l = arg;331 event_add(&l->ev, NULL);332 302 } 333 303
Note:
See TracChangeset
for help on using the changeset viewer.