Forza il client telnet in modalità carattere

Ho un’applicazione in cui accetto una connessione socket da un client telnet e inserisco una semplice interfaccia grafica basata su tastiera.

Il client telnet, almeno su Linux, si imposta automaticamente in modalità line-at-a-time, quindi devo sempre fare in ^]mode char manualmente.

Uno scremato delle RFC rilevanti suggerisce che se la mia applicazione inviasse semplicemente i caratteri IAC DONT LINEMODE (\377\376\042) non appena il client si connette, il client dovrebbe essere forzato in modalità carattere. Tuttavia, non fa alcuna differenza.

Qual è il bit di codice più semplice che farebbe il lavoro? Idealmente solo una stringa da inviare. La mia applicazione può assorbire qualsiasi spazzatura che il cliente rispedisce.

    Interessante. Ho avuto più fortuna nell’invio

     IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE 255 251 1 255 251 3 255 252 34 

    L’IAC WONT LINEMODE sembra essere ridondante: il mio client telnet sembra arrivare allo stato giusto senza, ma l’ho lasciato per completezza.

    Per quello che vale, l’ho risolto io stesso.

     // IAC WONT LINEMODE IAC WILL ECHO write(s,"\377\375\042\377\373\001",6); 

    ottiene il telecomando (almeno telnet da un Xterm su una macchina Linux) nello stato giusto.

    La soluzione di Kevin funziona alla grande: write(s,"\377\375\042\377\373\001",6);

    Anche se il commento è leggermente sbagliato. Dovrebbe dire “DO LINEMODE”, non “WONT LINEMODE”, vale a dire: // IAC DO LINEMODE IAC WILL ECHO

    (Fonte: rfc854 )