Option for xterm resizing. Over max connections, close() at once.
--- 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);
}
}
}