/* -*-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
*
/*----- 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.
typedef struct stept {
endpt e;
conn c;
- const char *desc;
+ char *desc;
} stept;
/* --- Socket source endpoint --- */
REFFD_DEC(ee->e.out);
}
+ free(ee->desc);
fw_dec();
DESTROY(ee);
}
/* --- 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)
{
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)
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);
e->e.other = 0;
e->e.f = EPF_FILE | SKF_CONN;
e->e.t = 0;
- e->desc = desc;
+ e->desc = xstrdup(desc);
/* --- Pay attention --- *
*
{
starget *st = (starget *)t;
st->a->ops->destroy(st->a);
- /* free(st->t.desc); */
+ free(st->t.desc);
DESTROY(st);
}