volatile int running_as_daemon = 0;
static RETSIGTYPE signal_cleanup(int signum) {
- CtdlLogPrintf(CTDL_DEBUG, "Caught signal %d; shutting down.\n", signum);
#ifdef THREADS_USESIGNALS
if (CT)
- {
- CtdlLogPrintf(CTDL_DEBUG, "Thread \"%s\" caught signal %d.\n", CT->name, signum);
CT->signal = signum;
- }
else
#endif
+ {
+ CtdlLogPrintf(CTDL_DEBUG, "Caught signal %d; shutting down.\n", signum);
exit_signal = signum;
+ }
}
/*
* client_write() ... Send binary data to the client.
*/
-void client_write(char *buf, int nbytes)
+int client_write(char *buf, int nbytes)
{
int bytes_written = 0;
int retval;
memcpy(&Ctx->redirect_buffer[Ctx->redirect_len], buf, nbytes);
Ctx->redirect_len += nbytes;
Ctx->redirect_buffer[Ctx->redirect_len] = 0;
- return;
+ return 0;
}
#ifndef HAVE_TCP_BUFFERING
Ctx->buffer_len += nbytes;
Ctx->output_buffer = realloc(Ctx->output_buffer, Ctx->buffer_len);
memcpy(&Ctx->output_buffer[old_buffer_len], buf, nbytes);
- return;
+ return 0;
}
#endif
#ifdef HAVE_OPENSSL
if (Ctx->redirect_ssl) {
client_write_ssl(buf, nbytes);
- return;
+ return 0;
}
#endif
strerror(errno), errno);
cit_backtrace();
Ctx->kill_me = 1;
- return;
+ return -1;
}
}
cit_backtrace();
// CtdlLogPrintf(CTDL_DEBUG, "Tried to send: %s", &buf[bytes_written]);
Ctx->kill_me = 1;
- return;
+ return -1;
}
bytes_written = bytes_written + retval;
}
+ return 0;
}
retval = select( (fd)+1,
&rfds, NULL, NULL, &tv);
+ if (retval < 0)
+ {
+ if (errno == EINTR)
+ {
+ CtdlLogPrintf(CTDL_DEBUG, "Interrupted select().\n");
+ CC->kill_me = 1;
+ return (-1);
+ }
+ }
if (FD_ISSET(fd, &rfds) == 0) {
return(0);
if (errno != EINTR) {
CtdlLogPrintf(CTDL_EMERG, "Exiting (%s)\n", strerror(errno));
CtdlThreadStopAll();
- } else if (!CtdlThreadCheckStop()) {
- CtdlLogPrintf(CTDL_DEBUG, "Interrupted select.\n");
+ } else {
+ CtdlLogPrintf(CTDL_DEBUG, "Interrupted CtdlThreadSelect.\n");
+ if (CtdlThreadCheckStop()) return(NULL);
goto do_select;
}
}