telnet协议:对中断的响应

时间:2015-11-20 20:56:51

标签: tcp telnet

我有一个C ++服务器应用程序,它为支持人员连接提供了一个侦听TCP端口。他们可以发出命令并获得响应。从应用程序的角度来看,它运行良好。

当他们使用 telnet(1)进行连接时,我的问题出现了,如果他们(出于某种原因)键入了^ C。我的服务器看到 telnet 发送给我的解析后的控制字符,我可以根据需要忽略或处理它们。但 telnet 客户端本身会进入某种状态,停止输出我服务器对客户端屏幕的响应。

我知道我可以1)告诉他们不要使用 telnet 或2)告诉他们在telnet应用程序中做toggle autoflush,或者通过~/.telnetrc或其他。但是,如果可能的话,我会首选做的是在服务器中使用正确的协议序列进行响应,以使其客户端使用后面的文本做正确的事情。这感觉它对他们来说是一个更好的用户体验。他们的工作很糟糕。

这可能吗?我已经通过了RFC,但不清楚。从我过去使用的 telnet 开始,这感觉就像它可行,但我的记忆可能很模糊。

1 个答案:

答案 0 :(得分:3)

IAC DO TIMING-MARKFF FD 06)背后的想法是抑制由IAC IP中断进程(FF F4)命令中断的进程的输出。通过这种方式,telnet客户端程序会隐藏用户的所有输出,直到它收到正确的时间标记或服务器不支持时间标记的通知。

您可能会或可能不会对IAC IP做出回复或采取行动,但您必须回复IAC DO TIMING-MARK。在您的情况下,最简单的方法是通过IAC WONT TIMING-MARKFF FC 06)回复您忽略它,客户端应继续正常显示所有输出。

如果你真的终止了当前的工作,那么你应该刷新你的缓冲区,然后用IAC WILL TIMING-MARK回复,这意味着客户端会在用户将^C推送到的时候丢弃所有服务器的输出。放在流中,找到IAC WILL TIMING-MARKFF FB 06)。