
telnet
------

 KOMMANDO:
    telnet <kommando> <argumente>

 ARGUMENTE:

     <kommando>
        Eines von den unten angebenen Kommandos, um bestimmte Aspekte der
        Kommunikation des Muds mit dem Client einzustellen.

     <arguments>
        Argumente fuer das jeweilige telnet Kommando

 BESCHREIBUNG:
    Dies ist ein Sammelkommando, um Einfluss auf die Eigenschaften der
    Kommunikation vom Mud mit dem Client nehmen zu koennen oder sich diese
    anzeigen zu lassen.
    Moegliche Kommandos sind:
    * keepalive
      Stellt ein, dass regelmaessig Daten vom MG zum Client geschickt werden,
      damit die Verbindung aufrechterhalten wird.
      Fuer Details s. Hilfeseite telnet_keepalive
    * rttime
      Ausgabe der letzten gemessenen "round-trip time" vom MG zum Client
      in Mikrosekunden (1s == 1000000 Mikrosekunden)
    * tls
      Zeigt an, ob die Verbindung zwischen Client und MG mit TLS
      verschluesselt ist, so dass auf dem Weg niemand mitlesen kann.
    * charset <set>
      Stellt den zu nutzenden Zeichensatz ein bzw. gibt ihn aus, wenn kein
      Argument angegeben wird.
      Soll die Einstellung geloescht und der Default wiederhergestellt werden,
      muss als Argument \'loeschen\' angegeben werden.
      Fuer Details s. Hilfeseite telnet_charset
    * client-gui <client> oder gui <client>
      Sendet fuer den angegebenen Client eine Nachricht via GMCP (sofern das
      vom Client aktiviert wurde), welche diesem sagt, von wo das aktuelle
      GUI-Paket fuer den Client ladbar ist.
      Zur Zeit steht hier nur "mudlet" zur Verfuegung.

 SIEHE AUCH:
    telnegs, telnet_keepalive, gmcp, telnet_charset
    P_TELNET_KEEPALIVE_DELAY

 LETZTE AeNDERUNG:
    11.11.2022, Zesstra
