{
int lisSock;
int logFd;
+ int doDaemon = 1;
+ int opt;
+ struct in_addr lisAddress = { .s_addr = htonl(INADDR_ANY) };
+
+ while ((opt = getopt(argc, argv, "dl:")) != -1) {
+ switch (opt) {
+ case 'd':
+ doDaemon = 0;
+ break;
+ case 'l':
+ if (inet_pton(AF_INET, optarg, &lisAddress) <= 0) {
+ fprintf(stderr, "`%s' is not a valid address\n", optarg);
+ exit(-1);
+ }
+ break;
+ default:
+ fprintf(stderr, "Usage: %s [-d] [-l <listening address>]\n", argv[0]);
+ exit(-1);
+ }
+ }
/* do the daemon stuff */
- if (argc <= 1 || strcmp(argv[1], "-d") != 0) {
+ if (doDaemon) {
if (InitDaemon() < 0) {
fprintf(stderr, "codemux daemon_init() failed\n");
exit(-1);
}
/* create the accept socket */
- if ((lisSock = CreatePrivateAcceptSocket(DEMUX_PORT, TRUE)) < 0) {
+ if ((lisSock = CreatePrivateAcceptSocket(DEMUX_PORT, TRUE,
+ &lisAddress)) < 0) {
fprintf(stderr, "failed creating accept socket\n");
exit(-1);
}
pidfile=/var/run/$PROC.pid
+[ -r /etc/sysconfig/codemux ] && . /etc/sysconfig/codemux
+
check_status() {
pid=`cat $pidfile 2>/dev/null`
#
fi
#initlog -c /usr/sbin/codemux # Depricated
- /usr/sbin/codemux
+ /usr/sbin/codemux $CODEMUX_OPTS
cmd=success
check_status && touch /var/lock/subsys/$PROC || cmd=failure
}
/*-----------------------------------------------------------------*/
static int
-CreatePrivateAcceptSocketEx(int portNum, int nonBlocking, int loopbackOnly)
+CreatePrivateAcceptSocketEx(int portNum, int nonBlocking, struct in_addr *addr)
{
int doReuse = 1;
struct linger doLinger;
/* set up info for binding listen */
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
- sa.sin_addr.s_addr = (loopbackOnly) ? htonl(INADDR_LOOPBACK)
- : htonl(INADDR_ANY);
+ sa.sin_addr = *addr;
sa.sin_port = htons(portNum);
/* bind the sock */
}
/*-----------------------------------------------------------------*/
int
-CreatePrivateAcceptSocket(int portNum, int nonBlocking)
+CreatePrivateAcceptSocket(int portNum, int nonBlocking, struct in_addr *addr)
{
- return CreatePrivateAcceptSocketEx(portNum, nonBlocking, FALSE);
+ return CreatePrivateAcceptSocketEx(portNum, nonBlocking, addr);
}
/*-----------------------------------------------------------------*/
char *
extern char *GetField(const char *start, int whichField);
extern char *GetWord(const char *start, int whichWord);
extern int DoesDotlessSuffixMatch(char *start, int len, char *suffix);
-extern int CreatePrivateAcceptSocket(int portNum, int nonBlocking);
+extern int CreatePrivateAcceptSocket(int portNum, int nonBlocking, struct in_addr *addr);
extern char *StrdupLower(const char *orig);
extern void StrcpyLower(char *dest, const char *src);