bugfix: possible infinite loops in tcp server
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 15 Nov 2023 04:07:52 +0000 (22:07 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 15 Nov 2023 04:07:52 +0000 (22:07 -0600)
core/net/tcp.onyx

index 967c84876b0724b92d829bf1f4c08f8b562176b3..9b451e99c80316678949c7cf8d7ac72e450c0053 100644 (file)
@@ -239,6 +239,18 @@ tcp_server_pulse :: (use server: &TCP_Server) -> bool {
         status_buffer: [1] Socket_Poll_Status;
         socket_poll_all(.[&socket], status_buffer, -1);
         return server.alive;
+
+    } else do for clients {
+        // If we have some clients, make sure their sockets are still alive.
+        // There were issues detecting this in the poll() function so we do
+        // do it explictly here.
+
+        if it == null do continue;
+        if it.state != .Alive do continue;
+
+        if !it.socket->is_alive() {
+            tcp_server_kill_client(server, it);
+        }
     }
 
     clients_with_messages := wait_to_get_client_messages(server);