void *senddata;
int sendlen, ret;
+ if (bufchain_size(chain) == 0)
+ return;
+
bufchain_prefix(chain, &senddata, &sendlen);
ret = write(fd, senddata, sendlen);
if (ret > 0)
error = back->init(NULL, &backhandle, cfg.host, cfg.port,
&realhost, nodelay);
if (error) {
- fprintf(stderr, "Unable to open connection:\n%s", error);
+ fprintf(stderr, "Unable to open connection:\n%s\n", error);
return 1;
}
logctx = log_init(NULL);
for (i = 0; i < skcount; i++) {
socket = sklist[i];
+ /*
+ * We must process exceptional notifications before
+ * ordinary readability ones, or we may go straight
+ * past the urgent marker.
+ */
+ if (FD_ISSET(socket, &xset))
+ select_result(socket, 4);
if (FD_ISSET(socket, &rset))
select_result(socket, 1);
if (FD_ISSET(socket, &wset))
select_result(socket, 2);
- if (FD_ISSET(socket, &xset))
- select_result(socket, 4);
}
if (FD_ISSET(0, &rset)) {
fprintf(stderr, "Remote process exit code unavailable\n");
exitcode = 1; /* this is an error condition */
}
- return exitcode;
+ cleanup_exit(exitcode);
+ return exitcode; /* shouldn't happen, but placates gcc */
}