Net::Telnet es un módulo de nivel superior al del módulo IO::Socket o el del Sockect.
Las exigencias del protocolo dicen que
- la transmisión ha de ser en binario (no traslación de caracteres)
- no bloqueante
- y sin buffering.
Net::Telnet, en cambio, y por defecto:
- sí hace traslación de los caracteres finales de línea que envía hacia el servidor
- la salida no es cacheada, pero sí la entrada
Si hay suerte, creo que lo único que habría que hacer es cambiar el comportamiento de la traslación de caracteres. Eso lo consigues con el argumento
Binmode => 1 en el new() del Net::Telnet. Y repasar a ver si
Output_record_separator e
Input_record_separator son conformes a lo que el servidor espera.
En cambio, lo de
Telnetmode es más extraño. Si le pones a 0, estás indicando que el servidor al que te conectas
no es conforme al estándar TELNET, por lo que el módulo no reconocerá y gestionará comandos estándar de ese protocolo. Debes estar completamente seguro de que el servidor al que te conectas sigue o no el estándar, porque si no lo sigue, entonces deberá ser tu programa quien lo haga (por ejemplo, al recibir un 0x0D 0x00, hay que traducirlo a un simple 0x0D). Yo, en principio, sospecho que es un protocolo TELNET normal, así que lo dejaría en
Telnetmode => 1.