+static void vconnfail(Conn *conn, const char *fmt, va_list al)
+ __attribute__((printf,2,0));
+
+static void vconnfail(Conn *conn, const char *fmt, va_list al) {
+ int requeue[art_MaxState];
+
+ Article *art;
+ while ((art= LIST_REMHEAD(conn->queue))) LIST_ADDTAIL(queue);
+ while ((art= LIST_REMHEAD(conn->sent))) {
+ counts[art->state]++;
+ if (art->state==art_Unsolicited) art->state= art_Unchecked;
+ LIST_ADDTAIL(queue);
+ }
+
+ int i;
+ XmitDetails *xd;
+ for (i=0, dp=&conn->xmitd; i<conn->xmitu; i++, dp++)
+ xmit_free(dp);
+
+ char *m= xvasprintf(fmt,al);
+ warn("#%d connection failed, requeueing " RCI_TRIPLE_FMT_BASE ": %s",
+ conn->fd, RCI_TRIPLE_FMT_VALS(requeue, /*nothing*/), m);
+ free(m);
+
+ close(conn->fd);
+ free(conn);
+
+ connect_delay= reconnect_delay_periods;
+ check_master_queue();
+}
+
+static void connfail(Connection *conn, const char *fmt, ...)
+ __attribute__((printf,2,3));
+static void connfail(Connection *conn, const char *fmt, ...) {
+ va_list al;
+ va_start(al,fmt);
+ vconnfail(fmt,al);
+ va_end(al);
+}