X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=blobdiff_plain;f=src%2Fplaintcp.c;h=fb4c6ceb01dbb0de6b1f5de1b477b4d4d6c6b351;hp=b898e37a05b47d3ef6efd3ccff1934ff5c29f953;hb=cac13158ac4fdd8b7682f16f879796e9c4e339ff;hpb=9d32586e59d7053a53e54860cbcfbb9c23f59e8a diff --git a/src/plaintcp.c b/src/plaintcp.c index b898e37..fb4c6ce 100644 --- a/src/plaintcp.c +++ b/src/plaintcp.c @@ -174,7 +174,8 @@ static void listenloop(struct muth *muth, va_list args) while(1) { namelen = sizeof(name); - block(tcp->fd, EV_READ, 0); + if(block(tcp->fd, EV_READ, 0) == 0) + goto out; ns = accept(tcp->fd, (struct sockaddr *)&name, &namelen); if(ns < 0) { flog(LOG_ERR, "accept: %s", strerror(errno)); @@ -215,7 +216,7 @@ void handleplain(int argc, char **argp, char **argv) omalloc(tcp); tcp->fd = fd; tcp->sport = port; - mustart(listenloop, tcp); + bufadd(listeners, mustart(listenloop, tcp)); if((fd = listensock4(port)) < 0) { if(errno != EADDRINUSE) { flog(LOG_ERR, "could not listen on IPv4 (port %i): %s", port, strerror(errno)); @@ -225,6 +226,6 @@ void handleplain(int argc, char **argp, char **argv) omalloc(tcp); tcp->fd = fd; tcp->sport = port; - mustart(listenloop, tcp); + bufadd(listeners, mustart(listenloop, tcp)); } }