Changes in icbd.c [6e89d69:e54f151] in code


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • icbd.c

    r6e89d69 re54f151  
    5656void getpeerinfo(struct icb_session *);
    5757void icbd_accept(int, short, void *);
    58 void icbd_paused(int, short, void *);
    5958void icbd_drop(struct icb_session *, char *);
    6059void icbd_ioerr(struct bufferevent *, short, void *);
     
    7271RB_GENERATE(icbd_sessions, icb_session, node, icbd_session_cmp);
    7372
    74 struct icbd_listener {
    75         struct event ev, pause;
    76 };
    77 
    7873int
    7974main(int argc, char *argv[])
     
    151146        for (ch = 0; ch < argc; ch++) {
    152147                struct addrinfo hints, *res, *res0;
    153                 struct icbd_listener *l;
     148                struct event *ev;
    154149                char *addr, *port;
    155150                int error, s, on = 1;
     
    201196                        (void)listen(s, TCP_BACKLOG);
    202197
    203                         if ((l = calloc(1, sizeof *l)) == NULL)
     198                        if ((ev = calloc(1, sizeof *ev)) == NULL)
    204199                                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) {
    207202                                syslog(LOG_ERR, "event_add: %m");
    208203                                return (EX_UNAVAILABLE);
    209204                        }
    210                         evtimer_set(&l->pause, icbd_paused, l);
    211205
    212206                        nsocks++;
     
    261255void
    262256icbd_accept(int fd, short event __attribute__((__unused__)),
    263     void *arg)
    264 {
    265         struct icbd_listener *l = arg;
     257    void *arg __attribute__((__unused__)))
     258{
    266259        struct sockaddr_storage ss;
    267         struct timeval p = { 1, 0 };
    268260        struct icb_session *is;
    269261        socklen_t ss_len = sizeof ss;
     
    271263
    272264        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        }
    291269        if (ss.ss_family == AF_INET)
    292270                if (setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof tos) < 0)
     
    322300        /* start icb conversation */
    323301        icb_start(is);
    324 }
    325 
    326 void
    327 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);
    332302}
    333303
Note: See TracChangeset for help on using the changeset viewer.