Dolda2000 GitWeb
/
mctap.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1fefa40
)
Added option to kill old mctap.
author
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 9 Aug 2008 19:40:04 +0000
(21:40 +0200)
committer
Fredrik Tolf
<fredrik@dolda2000.com>
Sat, 9 Aug 2008 19:40:04 +0000
(21:40 +0200)
src/mctap.c
patch
|
blob
|
blame
|
history
diff --git
a/src/mctap.c
b/src/mctap.c
index
9fce9ac
..
9d183f9
100644
(file)
--- a/
src/mctap.c
+++ b/
src/mctap.c
@@
-20,7
+20,7
@@
static int quit = 0;
static void usage(FILE *out)
{
static void usage(FILE *out)
{
- fprintf(out, "usage: mctap [-hdp] [-P PIDFILE] [-D TAPNAME] MCASTGROUP PORT\n");
+ fprintf(out, "usage: mctap [-hdp
k
] [-P PIDFILE] [-D TAPNAME] MCASTGROUP PORT\n");
}
static __attribute__ ((unused)) char *formataddress(struct sockaddr *arg, socklen_t arglen)
}
static __attribute__ ((unused)) char *formataddress(struct sockaddr *arg, socklen_t arglen)
@@
-204,6
+204,23
@@
static void sighand(int sig)
}
}
}
}
+static void killrunning(char *pidfile)
+{
+ FILE *pidfd;
+ int pid;
+
+ if((pidfd = fopen(pidfile, "r")) == NULL) {
+ fprintf(stderr, "mctab -k: could not read PID file %s: %s\n", pidfile, strerror(errno));
+ exit(1);
+ }
+ fscanf(pidfd, "%i", &pid);
+ if(kill(pid, SIGTERM)) {
+ fprintf(stderr, "mctab -k: could not kill %i: %s\n", pid, strerror(errno));
+ exit(1);
+ }
+ fclose(pidfd);
+}
+
int main(int argc, char **argv)
{
int c;
int main(int argc, char **argv)
{
int c;
@@
-212,14
+229,14
@@
int main(int argc, char **argv)
int port;
char *tapname;
char *pidfile;
int port;
char *tapname;
char *pidfile;
- int daemonize;
+ int daemonize
, killold
;
struct sockaddr_in dst;
FILE *pidfd;
tapname = "mctap";
struct sockaddr_in dst;
FILE *pidfd;
tapname = "mctap";
- daemonize = 0;
+ daemonize =
killold =
0;
pidfile = NULL;
pidfile = NULL;
- while((c = getopt(argc, argv, "hD:dpP:")) >= 0) {
+ while((c = getopt(argc, argv, "hD:dpP:
k
")) >= 0) {
switch(c) {
case 'D':
tapname = optarg;
switch(c) {
case 'D':
tapname = optarg;
@@
-233,6
+250,11
@@
int main(int argc, char **argv)
case 'P':
pidfile = optarg;
break;
case 'P':
pidfile = optarg;
break;
+ case 'k':
+ killold = 1;
+ if(pidfile == NULL)
+ pidfile = (void *)-1;
+ break;
case 'h':
usage(stdout);
return(0);
case 'h':
usage(stdout);
return(0);
@@
-243,6
+265,10
@@
int main(int argc, char **argv)
}
if(pidfile == (void *)-1)
pidfile = sprintf2("/var/run/mctap.%s.pid", tapname);
}
if(pidfile == (void *)-1)
pidfile = sprintf2("/var/run/mctap.%s.pid", tapname);
+ if(killold) {
+ killrunning(pidfile);
+ return(0);
+ }
if(argc - optind < 2) {
usage(stderr);
exit(1);
if(argc - optind < 2) {
usage(stderr);
exit(1);