From 745cfee16d9e8499d5bb0a37b7cc7a0ddffdb0eb Mon Sep 17 00:00:00 2001 From: mdw Date: Fri, 22 Feb 2002 23:44:44 +0000 Subject: [PATCH] Call @xfree@ rather than @free@. Add option to change the listen(2) parameter. --- socket.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/socket.c b/socket.c index 1b7e214..60d3d84 100644 --- a/socket.c +++ b/socket.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: socket.c,v 1.7 2001/06/22 19:37:00 mdw Exp $ + * $Id: socket.c,v 1.8 2002/02/22 23:44:44 mdw Exp $ * * Socket source and target definitions * @@ -29,6 +29,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: socket.c,v $ + * Revision 1.8 2002/02/22 23:44:44 mdw + * Call @xfree@ rather than @free@. Add option to change the listen(2) + * parameter. + * * Revision 1.7 2001/06/22 19:37:00 mdw * New @conn_init@ interface. * @@ -97,9 +101,10 @@ typedef struct ssource_opts { unsigned opt; unsigned conn; + unsigned listen; } ssource_opts; -static ssource_opts ssgo = { 256, 0 }; +static ssource_opts ssgo = { 256, 0, 5 }; #define SOCKOPT_LIMIT 0u #define SOCKOPT_NOLIMIT 1u @@ -256,7 +261,7 @@ static void stept_close(endpt *e) REFFD_DEC(ee->e.out); } - free(ee->desc); + xfree(ee->desc); fw_dec(); DESTROY(ee); } @@ -337,6 +342,18 @@ static int ssource_option(source *s, scanner *sc) CONF_ACCEPT; } + if (strcmp(sc->d.buf, "listen") == 0) { + token(sc); + if (sc->t == '=') + token(sc); + if (sc->t != CTOK_WORD || !isdigit((unsigned char)sc->d.buf[0])) + error(sc, "parse error, expected number"); + sso->listen = atoi(sc->d.buf); + if (sso->listen == 0) + error(sc, "argument of `listen' must be positive"); + CONF_ACCEPT; + } + if (strcmp(sc->d.buf, "logging") == 0 || strcmp(sc->d.buf, "log") == 0) { addr_opts *ao = ss ? ss->ao : &gao; @@ -518,7 +535,7 @@ static void ss_listen(ssource *ss) /* --- Set it to listen for connections --- */ - if (listen(fd, 5)) { + if (listen(fd, ss->o.listen)) { fw_log(-1, "[%s] couldn't listen on socket: %s", ss->s.desc, strerror(errno)); goto fail_1; @@ -618,7 +635,7 @@ static void ssource_destroy(source *s) ss->a->ops->freeopts(ss->ao); else DESTROY(ss->ao); - free(ss->s.desc); + xfree(ss->s.desc); ss->a->ops->destroy(ss->a); ss->t->ops->destroy(ss->t); source_remove(&ss->s); @@ -696,7 +713,7 @@ static void starget_destroy(target *t) { starget *st = (starget *)t; st->a->ops->destroy(st->a); - free(st->t.desc); + xfree(st->t.desc); DESTROY(st); } -- 2.11.0