]> prime8.dev >> repos - ttyd.git/commitdiff
server: add --exit-no-conn option (#1029)
authorbaitian <919600234@qq.com>
Tue, 5 Mar 2024 14:11:37 +0000 (22:11 +0800)
committerGitHub <noreply@github.com>
Tue, 5 Mar 2024 14:11:37 +0000 (22:11 +0800)
Co-authored-by: Shuanglei Tao <tsl0922@gmail.com>
README.md
man/ttyd.1
man/ttyd.man.md
src/protocol.c
src/server.c
src/server.h

index bc0c008e3232e25348ac0c37cdf55c200332cd1b..6afcf7797b7eb289dca07b996abeeb854aaca06d 100644 (file)
--- a/README.md
+++ b/README.md
@@ -80,6 +80,7 @@ OPTIONS:
     -O, --check-origin      Do not allow websocket connection from different origin
     -m, --max-clients       Maximum clients to support (default: 0, no limit)
     -o, --once              Accept only one client and exit on disconnection
+    -q, --exit-no-conn      Exit on all clients disconnection
     -B, --browser           Open terminal with the default system browser
     -I, --index             Custom index.html path
     -b, --base-path         Expected base path for requests coming from a reverse proxy (eg: /mounted/here, max length: 128)
index 96dfea8b57f40a4cbda6fb8ab3f2c9404a555081..826ea5f1865170b7cbc651391dbb45e7a465aaaf 100644 (file)
@@ -101,6 +101,10 @@ Cross platform: macOS, Linux, FreeBSD/OpenBSD, OpenWrt/LEDE, Windows
 -o, --once
       Accept only one client and exit on disconnection
 
+.PP
+-q, --exit-no-conn
+      Exit on all clients disconnection
+
 .PP
 -B, --browser
       Open terminal with the default system browser
index b587aaddccf1d0d428c5bcd5a7317ecfd29c09b5..98497cb90121f57e10c3a49836c11464a799188e 100644 (file)
@@ -68,6 +68,9 @@ ttyd 1 "September 2016" ttyd "User Manual"
   -o, --once
       Accept only one client and exit on disconnection
 
+  -q, --exit-no-conn
+      Exit on all clients disconnection
+
   -B, --browser
       Open terminal with the default system browser
 
index 3a53f96f9edafbe75a205e465ddc37c0f7bafa61..53e65d4dd12f2ff715c6017abb77da8002d925ad 100644 (file)
@@ -379,8 +379,8 @@ int callback_tty(struct lws *wsi, enum lws_callback_reasons reason, void *user,
         }
       }
 
-      if (server->once && server->client_count == 0) {
-        lwsl_notice("exiting due to the --once option.\n");
+      if ((server->once || server->exit_no_conn) && server->client_count == 0) {
+        lwsl_notice("exiting due to the --once/--exit-no-conn option.\n");
         force_exit = true;
         lws_cancel_service(context);
         exit(0);
index 9c8f118e8396913962e04deae2be60cb49654292..39f40e993267729d86346998155cead97f7fb576 100644 (file)
@@ -77,12 +77,13 @@ static const struct option options[] = {{"port", required_argument, NULL, 'p'},
                                         {"check-origin", no_argument, NULL, 'O'},
                                         {"max-clients", required_argument, NULL, 'm'},
                                         {"once", no_argument, NULL, 'o'},
+                                        {"exit-no-conn", no_argument, NULL, 'q'},
                                         {"browser", no_argument, NULL, 'B'},
                                         {"debug", required_argument, NULL, 'd'},
                                         {"version", no_argument, NULL, 'v'},
                                         {"help", no_argument, NULL, 'h'},
                                         {NULL, 0, 0, 0}};
-static const char *opt_string = "p:i:U:c:H:u:g:s:w:I:b:P:6aSC:K:A:Wt:T:Om:oBd:vh";
+static const char *opt_string = "p:i:U:c:H:u:g:s:w:I:b:P:6aSC:K:A:Wt:T:Om:oqBd:vh";
 
 static void print_help() {
   // clang-format off
@@ -108,6 +109,7 @@ static void print_help() {
           "    -O, --check-origin      Do not allow websocket connection from different origin\n"
           "    -m, --max-clients       Maximum clients to support (default: 0, no limit)\n"
           "    -o, --once              Accept only one client and exit on disconnection\n"
+          "    -q, --exit-no-conn      Exit on all clients disconnection\n"
           "    -B, --browser           Open terminal with the default system browser\n"
           "    -I, --index             Custom index.html path\n"
           "    -b, --base-path         Expected base path for requests coming from a reverse proxy (eg: /mounted/here, max length: 128)\n"
@@ -150,6 +152,7 @@ static void print_config() {
   if (server->url_arg) lwsl_notice("  allow url arg: true\n");
   if (server->max_clients > 0) lwsl_notice("  max clients: %d\n", server->max_clients);
   if (server->once) lwsl_notice("  once: true\n");
+  if (server->exit_no_conn) lwsl_notice("  exit_no_conn: true\n");
   if (server->index != NULL) lwsl_notice("  custom index.html: %s\n", server->index);
   if (server->cwd != NULL) lwsl_notice("  working directory: %s\n", server->cwd);
   if (!server->writable) lwsl_notice("The --writable option is not set, will start in readonly mode");
@@ -367,6 +370,9 @@ int main(int argc, char **argv) {
       case 'o':
         server->once = true;
         break;
+      case 'q':
+        server->exit_no_conn = true;
+        break;
       case 'B':
         browser = true;
         break;
index 4a659b0ed8cf99cee02c23a66be36ea7b08975ba..e13d632714441ee02a06cfd6465f4cd4e9a9bb42 100644 (file)
@@ -59,7 +59,7 @@ struct pss_tty {
 typedef struct {
   struct pss_tty *pss;
   bool ws_closed;
-} pty_ctx_t ;
+} pty_ctx_t;
 
 struct server {
   int client_count;        // client count
@@ -78,6 +78,7 @@ struct server {
   bool check_origin;       // whether allow websocket connection from different origin
   int max_clients;         // maximum clients to support
   bool once;               // whether accept only one client and exit on disconnection
+  bool exit_no_conn;       // whether exit on all clients disconnection
   char socket_path[255];   // UNIX domain socket path
   char terminal_type[30];  // terminal type to report