diff --git a/src/libstrongswan/utils/utils.c b/src/libstrongswan/utils/utils.c index 4228b1f51..ccab4062e 100644 --- a/src/libstrongswan/utils/utils.c +++ b/src/libstrongswan/utils/utils.c @@ -111,6 +111,14 @@ void wait_sigint() sigint_cond->destroy(sigint_cond); } +/** + * Windows variant + */ +void send_sigint() +{ + handler(CTRL_C_EVENT); +} + #else /* !WIN32 */ /** @@ -131,6 +139,14 @@ void wait_sigint() } } +/** + * Unix variant + */ +void send_sigint() +{ + kill(0, SIGINT); +} + #ifndef HAVE_SIGWAITINFO int sigwaitinfo(const sigset_t *set, void *info) { diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h index 083f55344..a5a5faacb 100644 --- a/src/libstrongswan/utils/utils.h +++ b/src/libstrongswan/utils/utils.h @@ -237,6 +237,12 @@ int sigwaitinfo(const sigset_t *set, void *info); */ void wait_sigint(); +/** + * Portable function to send a SIGINT/SIGTERM (or equivalent) to the current + * process to exit the above function. + */ +void send_sigint(); + #ifndef HAVE_CLOSEFROM /** * Close open file descriptors greater than or equal to lowfd.