X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=innduct.git;a=blobdiff_plain;f=conn.c;h=d20b342d4d22f79df61f9916337af9140e127eff;hp=c99174c59317482768167b6f520e2e278471af6d;hb=229c6d070b1ddb2cebb0a3f12bc71713795cd627;hpb=0d0b89542d5657ecb96b02f35b1bfdd53c635cb2 diff --git a/conn.c b/conn.c index c99174c..d20b342 100644 --- a/conn.c +++ b/conn.c @@ -100,8 +100,9 @@ void vconnfail(Conn *conn, const char *fmt, va_list al) { LIST_REMOVE(conns,conn); - char *m= xvasprintf(fmt,al); - warn("C%d (now %d) connection failed requeueing " RCI_TRIPLE_FMT_BASE ": %s", + char *m= mvasprintf(fmt,al); + warn("C%d (now %d) connection failed " + "(requeueing " RCI_TRIPLE_FMT_BASE "): %s", conn->fd, conns.count, RCI_TRIPLE_VALS_BASE(requeue, /*nothing*/), m); free(m); @@ -188,6 +189,30 @@ void check_idle_conns(void) { conn_idle_close(conn, "low volume"); } +/*---------- reporting numbers of connections ----------*/ + +static int conns_max_reported, conns_idle_reported; + +void notice_conns_more(const char *new_kind) { + if (conns.count > conns_max_reported) { + notice("up to %d connection(s) (%s)", conns.count, new_kind); + conns_max_reported= conns.count; + } +} + +void notice_conns_fewer(void) { + if (!conns.count && !conns_idle_reported) { + notice("low volume, using intermittent connection"); + conns_idle_reported= 1; + } +} + +void notice_conns_stats(void) { + notice("currently %d connection(s)", conns.count); + conns_max_reported= conns.count; + conns_idle_reported= 0; +} + /*---------- making new connections ----------*/ pid_t connecting_child; @@ -308,8 +333,9 @@ static void *connchild_event(oop_source *lp, int fd, oop_event e, void *u) { if (r) syscrash("oop_rd_read for peer (fd=%d)",conn->fd); LIST_ADDHEAD(conns, conn); - notice("C%d (now %d) connected %s", - conn->fd, conns.count, conn->stream ? "streaming" : "plain"); + const char *streamdesc= conn->stream ? "streaming" : "plain"; + info("C%d (now %d) connected %s", conn->fd, conns.count, streamdesc); + notice_conns_more(streamdesc); connect_attempt_discard(); check_assign_articles(); @@ -402,7 +428,7 @@ void connect_start(void) { default: warn("connect: unexpected response to MODE STREAM: %.50s", sanitise(buf,-1)); - exitstatus= 2; + exitstatus= CONNCHILD_ESTATUS_NOSTREAM; break; } }