]> git.seodisparate.com - UDPConnection/commitdiff
Impl handling Ctrl-C for Windows in NetworkTest
authorStephen Seo <seo.disparate@gmail.com>
Tue, 10 Jan 2023 03:14:57 +0000 (12:14 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Tue, 10 Jan 2023 03:14:57 +0000 (12:14 +0900)
src/test/UDPC_NetworkTest.c

index f3c74cab3d923c25ea8853ddd32b6729cdd0cb01..197ea2e881a7dea48be47eb7fa24b335c6b4c61a 100644 (file)
@@ -12,6 +12,7 @@
 #if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
 #include <synchapi.h>
 #include <ws2tcpip.h>
+#include <windows.h>
 #elif UDPC_PLATFORM == UDPC_PLATFORM_MAC || UDPC_PLATFORM == UDPC_PLATFORM_LINUX
 #include <time.h>
 #endif
@@ -61,6 +62,25 @@ void sleep_seconds(unsigned int seconds) {
 #endif
 }
 
+#if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
+static BOOL windows_ctrl_handler_invoked = FALSE;
+
+BOOL WINAPI CtrlHandler (DWORD fdwCtrlType) {
+    switch(fdwCtrlType) {
+        case CTRL_C_EVENT:
+            printf("Ctrl-C event\n");
+            windows_ctrl_handler_invoked = TRUE;
+            return TRUE;
+        case CTRL_CLOSE_EVENT:
+            printf("Ctrl-Close event\n");
+            windows_ctrl_handler_invoked = TRUE;
+            return TRUE;
+        default:
+            return FALSE;
+    }
+}
+#endif
+
 int main(int argc, char **argv) {
     --argc; ++argv;
     if(argc == 0) {
@@ -319,6 +339,14 @@ int main(int argc, char **argv) {
 
     sigaction(SIGINT, &sa, NULL);
     while(receivedSIGINT == 0) {
+#elif UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
+    if (SetConsoleCtrlHandler(CtrlHandler, TRUE)) {
+        printf("Windows CtrlHandler enabled\n");
+    } else {
+        printf("WARNING: Unable to set Windows CtrlHandler\n");
+    }
+
+    while(!windows_ctrl_handler_invoked) {
 #else
     while(1) {
 #endif