Option for xterm resizing. Over max connections, close() at once.
authorviric@llimona
Mon, 24 Sep 2007 13:56:13 +0200
changeset 37 b0588bddef91
parent 36 da427c23d755
child 38 f1e581c862d5
Option for xterm resizing. Over max connections, close() at once.
.hgignore
gen_sockets.c
main.c
tcp_server.c
unix_server.c
--- a/.hgignore	Mon Sep 24 13:45:24 2007 +0200
+++ b/.hgignore	Mon Sep 24 13:56:13 2007 +0200
@@ -1,2 +1,3 @@
 .o$
 ^tm$
+^test_filter$
--- a/gen_sockets.c	Mon Sep 24 13:45:24 2007 +0200
+++ b/gen_sockets.c	Mon Sep 24 13:56:13 2007 +0200
@@ -56,6 +56,7 @@
     {
         telnet_send_noecho(s);
         telnet_send_suppress_go_ahead(s);
+    }
+    if (command_line.s_param.send_xterm_resize)
         send_xterm_resize_string_to_socket(s);
-    }
 }
--- a/main.c	Mon Sep 24 13:45:24 2007 +0200
+++ b/main.c	Mon Sep 24 13:56:13 2007 +0200
@@ -48,6 +48,7 @@
     printf(" -p NUM Listen to tcp port NUM, and not listen to any Unix socket."
             "\n");
     printf(" -e     Echo remote input to the server terminal.\n");
+    printf(" -r     Send xterm's resize control string to clients.\n");
     return 0;
 }
 
@@ -86,6 +87,7 @@
     command_line.s_param.detach = 0;
     command_line.s_param.client_can_write = 0;
     command_line.s_param.echo_in_local_terminal = 0;
+    command_line.s_param.send_xterm_resize = 0;
 
     command_line.tcp_port = 40000; /* Arbitrary */
     command_line.buffer_size = 4096; /* Arbitrary */
@@ -145,6 +147,9 @@
             case 'x':
                 command_line.s_param.client_may_close_app_stdin = 1;
                 break;
+            case 'r':
+                command_line.s_param.send_xterm_resize = 1;
+                break;
             case 'e':
                 command_line.s_param.echo_in_local_terminal = 1;
                 break;
--- a/tcp_server.c	Mon Sep 24 13:45:24 2007 +0200
+++ b/tcp_server.c	Mon Sep 24 13:56:13 2007 +0200
@@ -89,11 +89,8 @@
 {
     int i;
 
-    if (served_sockets > connected_sockets)
-    {
-        FD_SET(listen_socket, read_set);
-        *maxfd = max(*maxfd, listen_socket);
-    }
+    FD_SET(listen_socket, read_set);
+    *maxfd = max(*maxfd, listen_socket);
 
     for (i=0; i < connected_sockets; ++i)
     {
@@ -160,14 +157,19 @@
     }
 
     /* Listen connection */
-    if (served_sockets > connected_sockets)
+    if (FD_ISSET(listen_socket, read_set))
     {
-        if (FD_ISSET(listen_socket, read_set))
+        if (served_sockets > connected_sockets)
         {
             int s;
             s = accept_connection(listen_socket);
             conn_sockets[connected_sockets++] = s;
             welcome_new_client_socket(s);
+        } else
+        {
+            int s;
+            s = accept_connection(listen_socket);
+            close(s);
         }
     }
 }
--- a/unix_server.c	Mon Sep 24 13:45:24 2007 +0200
+++ b/unix_server.c	Mon Sep 24 13:56:13 2007 +0200
@@ -114,11 +114,8 @@
 {
     int i;
 
-    if (served_sockets > connected_sockets)
-    {
-        FD_SET(listen_socket, read_set);
-        *maxfd = max(*maxfd, listen_socket);
-    }
+    FD_SET(listen_socket, read_set);
+    *maxfd = max(*maxfd, listen_socket);
 
     for (i=0; i < connected_sockets; ++i)
     {
@@ -185,14 +182,19 @@
     }
 
     /* Listen connection */
-    if (served_sockets > connected_sockets)
+    if (FD_ISSET(listen_socket, read_set))
     {
-        if (FD_ISSET(listen_socket, read_set))
+        if (served_sockets > connected_sockets)
         {
             int s;
             s = accept_connection(listen_socket);
             conn_sockets[connected_sockets++] = s;
             welcome_new_client_socket(s);
+        } else
+        {
+            int s;
+            s = accept_connection(listen_socket);
+            close(s);
         }
     }
 }