while(1) {
namelen = sizeof(name);
- block(pd->fd, EV_READ, 0);
+ if(block(pd->fd, EV_READ, 0) == 0)
+ goto out;
ns = accept(pd->fd, (struct sockaddr *)&name, &namelen);
if(ns < 0) {
flog(LOG_ERR, "accept: %s", strerror(errno));
pd->sport = port;
pd->creds = creds;
pd->ncreds = ncreds.b;
- mustart(listenloop, pd);
- if((fd = listensock6(port)) < 0) {
+ bufadd(listeners, mustart(listenloop, pd));
+ if((fd = listensock4(port)) < 0) {
if(errno != EADDRINUSE) {
- flog(LOG_ERR, "could not listen on IPv6 port (port %i): %s", port, strerror(errno));
+ flog(LOG_ERR, "could not listen on IPv4 port (port %i): %s", port, strerror(errno));
exit(1);
}
} else {
pd->fd = fd;
pd->sport = port;
pd->creds = creds;
- mustart(listenloop, pd);
+ bufadd(listeners, mustart(listenloop, pd));
}
}