X-Git-Url: https://git.distorted.org.uk/~mdw/fwd/blobdiff_plain/0fe44b098ee6e9b906ab42ab66879db5917d7b6f..723210e69817a256f32170e2bd28012c6bccca34:/socket.c diff --git a/socket.c b/socket.c index d3a5134..0a80b48 100644 --- a/socket.c +++ b/socket.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: socket.c,v 1.3 1999/10/22 22:48:36 mdw Exp $ + * $Id: socket.c,v 1.6 2001/02/03 20:30:03 mdw Exp $ * * Socket source and target definitions * @@ -29,6 +29,15 @@ /*----- Revision history --------------------------------------------------* * * $Log: socket.c,v $ + * Revision 1.6 2001/02/03 20:30:03 mdw + * Support re-reading config files on SIGHUP. + * + * Revision 1.5 2000/03/23 23:20:42 mdw + * Remove listener even if connection option isn't SOCKOPT_LIMITED. + * + * Revision 1.4 1999/12/22 15:44:25 mdw + * Fix log message. + * * Revision 1.3 1999/10/22 22:48:36 mdw * New connection options: unlimited concurrent connections, and one-shot * listening sockets. @@ -117,7 +126,7 @@ typedef struct starget { typedef struct stept { endpt e; conn c; - const char *desc; + char *desc; } stept; /* --- Socket source endpoint --- */ @@ -248,6 +257,7 @@ static void stept_close(endpt *e) REFFD_DEC(ee->e.out); } + free(ee->desc); fw_dec(); DESTROY(ee); } @@ -522,7 +532,7 @@ static void ss_listen(ssource *ss) /* --- Bind it to the right port --- */ if (bind(fd, &ga->sa, ga->a.sz)) { - fw_log(-1, "[%s] couldn't bind to %s: %s", ss->s.desc, strerror(errno)); + fw_log(-1, "[%s] couldn't bind socket: %s", ss->s.desc, strerror(errno)); goto fail_1; } if (ga->a.ops->bound) @@ -620,7 +630,7 @@ static void ssource_destroy(source *s) { ssource *ss = (ssource *)s; - if (ss->o.conn) { + if (ss->o.conn || ss->o.opt != SOCKOPT_LIMIT) { sel_rmfile(&ss->r); close(ss->r.fd); if (ss->a->ops->unbind) @@ -630,7 +640,7 @@ static void ssource_destroy(source *s) ss->a->ops->freeopts(ss->ao); else DESTROY(ss->ao); - /* free(ss->s.desc); */ + free(ss->s.desc); ss->a->ops->destroy(ss->a); ss->t->ops->destroy(ss->t); source_remove(&ss->s); @@ -691,7 +701,7 @@ static endpt *starget_create(target *t, const char *desc) e->e.other = 0; e->e.f = EPF_FILE | SKF_CONN; e->e.t = 0; - e->desc = desc; + e->desc = xstrdup(desc); /* --- Pay attention --- * * @@ -723,7 +733,7 @@ static void starget_destroy(target *t) { starget *st = (starget *)t; st->a->ops->destroy(st->a); - /* free(st->t.desc); */ + free(st->t.desc); DESTROY(st); }