diff --git a/mongoose.c b/mongoose.c
index 40d965a18379a5a40aa31511bd10c9a75c50fec3..cde68d3e0182fefb4b6ff3d63f782ab4ebfaec5c 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -767,6 +767,7 @@ int ns_server_poll(struct ns_server *server, int milli) {
   FD_ZERO(&read_set);
   FD_ZERO(&write_set);
   ns_add_to_set(server->listening_sock, &read_set, &max_fd);
+  ns_add_to_set(server->ctl[1], &read_set, &max_fd);
 
   for (conn = server->active_connections; conn != NULL; conn = tmp_conn) {
     tmp_conn = conn->next;
@@ -797,6 +798,14 @@ int ns_server_poll(struct ns_server *server, int milli) {
       }
     }
 
+    // Read possible wakeup calls
+    if (server->ctl[1] != INVALID_SOCKET &&
+        FD_ISSET(server->ctl[1], &read_set)) {
+      unsigned char ch;
+      recv(server->ctl[1], &ch, 1, 0);
+      send(server->ctl[1], &ch, 1, 0);
+    }
+
     for (conn = server->active_connections; conn != NULL; conn = tmp_conn) {
       tmp_conn = conn->next;
       if (FD_ISSET(conn->sock, &read_set)) {