tcpsvd: new applet

It's a GPL-ed 'clone' of Dan Bernstein's tcpserver.
Author: Gerrit Pape <pape@smarden.org>
http://smarden.sunsite.dk/ipsvd/
size tcpsvd.o
   text    data     bss     dec     hex filename
   2571       4      16    2591     a1f tcpsvd.o
This commit is contained in:
Denis Vlasenko
2007-04-01 01:18:20 +00:00
parent f443bffd3c
commit 2856dab477
19 changed files with 704 additions and 111 deletions

View File

@@ -385,56 +385,9 @@ int seek_set(int fd,seek_pos pos)
#endif
/*** sig_block.c ***/
void sig_block(int sig)
{
sigset_t ss;
sigemptyset(&ss);
sigaddset(&ss, sig);
sigprocmask(SIG_BLOCK, &ss, NULL);
}
void sig_unblock(int sig)
{
sigset_t ss;
sigemptyset(&ss);
sigaddset(&ss, sig);
sigprocmask(SIG_UNBLOCK, &ss, NULL);
}
void sig_blocknone(void)
{
sigset_t ss;
sigemptyset(&ss);
sigprocmask(SIG_SETMASK, &ss, NULL);
}
/*** sig_catch.c ***/
void sig_catch(int sig,void (*f)(int))
{
struct sigaction sa;
sa.sa_handler = f;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(sig,&sa, NULL);
}
/*** sig_pause.c ***/
void sig_pause(void)
{
sigset_t ss;
sigemptyset(&ss);
sigsuspend(&ss);
}
/*** str_chr.c ***/
// strchrnul?
unsigned str_chr(const char *s,int c)
{
char ch;
@@ -449,24 +402,3 @@ unsigned str_chr(const char *s,int c)
}
return t - s;
}
/*** wait_nohang.c ***/
int wait_nohang(int *wstat)
{
return waitpid(-1, wstat, WNOHANG);
}
/*** wait_pid.c ***/
int wait_pid(int *wstat, int pid)
{
int r;
do
r = waitpid(pid, wstat, 0);
while ((r == -1) && (errno == EINTR));
return r;
}

View File

@@ -123,32 +123,9 @@ extern int open_write(const char *);
extern unsigned pmatch(const char *, const char *, unsigned);
/*** sig.h ***/
extern void sig_catch(int,void (*)(int));
#define sig_ignore(s) (sig_catch((s), SIG_IGN))
#define sig_uncatch(s) (sig_catch((s), SIG_DFL))
extern void sig_block(int);
extern void sig_unblock(int);
extern void sig_blocknone(void);
extern void sig_pause(void);
/*** str.h ***/
extern unsigned str_chr(const char *,int); /* never returns NULL */
#define str_diff(s,t) strcmp((s), (t))
#define str_equal(s,t) (!strcmp((s), (t)))
/*** wait.h ***/
extern int wait_pid(int *wstat, int pid);
extern int wait_nohang(int *wstat);
#define wait_crashed(w) ((w) & 127)
#define wait_exitcode(w) ((w) >> 8)
#define wait_stopsig(w) ((w) >> 8)
#define wait_stopped(w) (((w) & 127) == 127)

View File

@@ -323,11 +323,11 @@ static void startservice(struct svdir *s)
close(logpipe[0]);
}
}
sig_uncatch(SIGCHLD);
signal(SIGCHLD, SIG_DFL);
signal(SIGTERM, SIG_DFL);
sig_unblock(SIGCHLD);
sig_uncatch(SIGTERM);
sig_unblock(SIGTERM);
execve(*run, run, environ);
execvp(*run, run);
fatal2_cannot(s->islog ? "start log/" : "start ", *run);
}
if (s->state != S_FINISH) {

View File

@@ -97,9 +97,10 @@ static void runsv(int no, const char *name)
prog[0] = (char*)"runsv";
prog[1] = (char*)name;
prog[2] = NULL;
sig_uncatch(SIGHUP);
sig_uncatch(SIGTERM);
if (pgrp) setsid();
if (pgrp)
setsid();
signal(SIGHUP, SIG_DFL);
signal(SIGTERM, SIG_DFL);
BB_EXECVP(prog[0], prog);
//pathexec_run(*prog, prog, (char* const*)environ);
fatal2_cannot("start runsv ", name);

View File

@@ -143,9 +143,9 @@ static unsigned processorstart(struct logdir *ld)
int fd;
/* child */
sig_uncatch(SIGTERM);
sig_uncatch(SIGALRM);
sig_uncatch(SIGHUP);
signal(SIGTERM, SIG_DFL);
signal(SIGALRM, SIG_DFL);
signal(SIGHUP, SIG_DFL);
sig_unblock(SIGTERM);
sig_unblock(SIGALRM);
sig_unblock(SIGHUP);