aboutsummaryrefslogtreecommitdiffstats
path: root/src/pluto/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pluto/server.c')
-rw-r--r--src/pluto/server.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/pluto/server.c b/src/pluto/server.c
index 21f65f4f8..6ad49640d 100644
--- a/src/pluto/server.c
+++ b/src/pluto/server.c
@@ -56,6 +56,7 @@
#include "adns.h" /* needs <resolv.h> */
#include "dnskey.h" /* needs keys.h and adns.h */
#include "whack.h" /* for RC_LOG_SERIOUS */
+#include "pluto.h"
#include <pfkeyv2.h>
#include <pfkey.h>
@@ -811,7 +812,7 @@ call_server(void)
{
fd_set readfds;
fd_set writefds;
- int ndes;
+ int ndes, events_fd;
/* wait for next interesting thing */
@@ -853,6 +854,11 @@ call_server(void)
FD_SET(adns_afd, &readfds);
}
+ events_fd = pluto->events->get_event_fd(pluto->events);
+ if (maxfd < events_fd)
+ maxfd = events_fd;
+ FD_SET(events_fd, &readfds);
+
#ifdef KLIPS
if (!no_klips)
{
@@ -947,6 +953,17 @@ call_server(void)
ndes--;
}
+ if (FD_ISSET(events_fd, &readfds))
+ {
+ passert(ndes > 0);
+ DBG(DBG_CONTROL,
+ DBG_log(BLANK_FORMAT);
+ DBG_log("*handling asynchronous events"));
+ pluto->events->handle(pluto->events);
+ passert(GLOBALS_ARE_RESET());
+ ndes--;
+ }
+
#ifdef KLIPS
if (!no_klips && FD_ISSET(*kernel_ops->async_fdp, &readfds))
{