summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sbin/isakmpd/monitor.c147
1 files changed, 69 insertions, 78 deletions
diff --git a/sbin/isakmpd/monitor.c b/sbin/isakmpd/monitor.c
index 25d144b8981..873de7ee643 100644
--- a/sbin/isakmpd/monitor.c
+++ b/sbin/isakmpd/monitor.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: monitor.c,v 1.35 2005/03/03 22:05:58 moritz Exp $ */
+/* $OpenBSD: monitor.c,v 1.36 2005/03/11 12:39:55 hshoexer Exp $ */
/*
* Copyright (c) 2003 Håkan Olsson. All rights reserved.
@@ -60,7 +60,7 @@ struct monitor_state {
pid_t pid;
int s;
char root[MAXPATHLEN];
-} m_state;
+} m_state;
volatile sig_atomic_t sigchlded = 0;
extern volatile sig_atomic_t sigtermed;
@@ -133,7 +133,6 @@ monitor_init(int debug)
setproctitle("monitor [priv]");
}
-
/* With "-dd", stop and wait here. For gdb "attach" etc. */
if (debug > 1) {
log_print("monitor_init: stopped %s PID %d fd %d%s",
@@ -525,6 +524,7 @@ monitor_loop(int debug)
pid_t pid;
fd_set *fds;
size_t fdsn;
+ int32_t msgcode;
int status, n, maxfd;
if (!debug)
@@ -575,85 +575,76 @@ monitor_loop(int debug)
FD_SET(m_state.s, fds);
n = select(maxfd, fds, NULL, NULL, NULL);
- if (n == -1) {
- if (errno != EINTR) {
+ if (n <= 0) {
+ if (n && errno != EINTR) {
log_error("select");
sleep(1);
}
- } else if (n)
- if (FD_ISSET(m_state.s, fds)) {
- int32_t msgcode;
- if (m_read_int32(m_state.s, &msgcode))
- m_flush(m_state.s);
- else
- switch (msgcode) {
- case MONITOR_GET_FD:
- m_priv_getfd(m_state.s);
- break;
-
- case MONITOR_UI_INIT:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_UI_INIT"));
- m_priv_test_state(STATE_INIT);
- m_priv_ui_init(m_state.s);
- break;
-
- case MONITOR_PFKEY_OPEN:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_PFKEY_OPEN"));
- m_priv_test_state(STATE_INIT);
- m_priv_pfkey_open(m_state.s);
- break;
-
- case MONITOR_GET_SOCKET:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_GET_SOCKET"));
- m_priv_test_state(STATE_INIT);
- m_priv_getsocket(m_state.s);
- break;
-
- case MONITOR_SETSOCKOPT:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_SETSOCKOPT"));
- m_priv_test_state(STATE_INIT);
- m_priv_setsockopt(m_state.s);
- break;
-
- case MONITOR_BIND:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_BIND"));
- m_priv_test_state(STATE_INIT);
- m_priv_bind(m_state.s);
- break;
-
- case MONITOR_INIT_DONE:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_INIT_DONE"));
- m_priv_test_state(STATE_INIT);
- m_priv_increase_state(
- STATE_RUNNING);
- break;
-
- case MONITOR_SHUTDOWN:
- LOG_DBG((LOG_MISC, 80,
- "monitor_loop: "
- "MONITOR_SHUTDOWN"));
- m_priv_increase_state(
- STATE_QUIT);
- break;
-
- default:
- log_print("monitor_loop: "
- "got unknown code %d",
- msgcode);
- }
+ continue;
+ }
+ if (FD_ISSET(m_state.s, fds)) {
+ if (m_read_int32(m_state.s, &msgcode)) {
+ m_flush(m_state.s);
+ continue;
}
+ switch (msgcode) {
+ case MONITOR_GET_FD:
+ m_priv_getfd(m_state.s);
+ break;
+
+ case MONITOR_UI_INIT:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_UI_INIT"));
+ m_priv_test_state(STATE_INIT);
+ m_priv_ui_init(m_state.s);
+ break;
+
+ case MONITOR_PFKEY_OPEN:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_PFKEY_OPEN"));
+ m_priv_test_state(STATE_INIT);
+ m_priv_pfkey_open(m_state.s);
+ break;
+
+ case MONITOR_GET_SOCKET:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_GET_SOCKET"));
+ m_priv_test_state(STATE_INIT);
+ m_priv_getsocket(m_state.s);
+ break;
+
+ case MONITOR_SETSOCKOPT:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_SETSOCKOPT"));
+ m_priv_test_state(STATE_INIT);
+ m_priv_setsockopt(m_state.s);
+ break;
+
+ case MONITOR_BIND:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_BIND"));
+ m_priv_test_state(STATE_INIT);
+ m_priv_bind(m_state.s);
+ break;
+
+ case MONITOR_INIT_DONE:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_INIT_DONE"));
+ m_priv_test_state(STATE_INIT);
+ m_priv_increase_state(STATE_RUNNING);
+ break;
+
+ case MONITOR_SHUTDOWN:
+ LOG_DBG((LOG_MISC, 80,
+ "monitor_loop: MONITOR_SHUTDOWN"));
+ m_priv_increase_state(STATE_QUIT);
+ break;
+
+ default:
+ log_print("monitor_loop: got unknown code %d",
+ msgcode);
+ }
+ }
}
free(fds);