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:
@@ -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;
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user