【问题标题】:How is Ctrl+C key behaves in a TCP connectionCtrl+C 键在 TCP 连接中的行为如何
【发布时间】:2015-06-11 07:55:47
【问题描述】:

我正在研究网络,特别是 tcp 连接,我想知道在您使用 tcp 连接远程连接到服务器并发送命令行以执行某些操作的情况下,他们如何处理发送 ctrl +c 信号?
它是否发送一个在数据部分描述 ctrl+c 命中的普通 tcp 包?
还是发送一个打开了RST 标志或FIN 标志的包来切断或关闭连接?

【问题讨论】:

  • TCP 连接(只是传入字节流和传出字节流)和键盘输入之间存在某种关系。例如。一个远程登录程序。 Ctrl-C 转到该程序,该程序处理 Ctrl-C。
  • 它作为数据发送,有时作为紧急数据发送。

标签: sockets tcp control-c


【解决方案1】:

没有通过 TCP 发送信号这样的事情。

Ctrl+C 是终端生成的信号。假设您(或正在运行的进程)没有更改终端的设置,这意味着终端驱动程序将 Ctrl+C 组合键转换为kill(x, SIGINT),其中x 是前台进程组的进程组 ID(因此,SIGINT 被传递到前台进程组中的每个进程,在您的情况下,这可能只是一个进程。

信号传递时进程做什么不是终端驱动的事情。该进程可能忽略了该信号,因此没有任何反应。或者它可能已经安装了一个信号处理程序,并在信号处理程序内部做一些工作(比如向套接字写入一些东西,当接收器读取时会导致它向自己发送SIGINT - 这模拟了“远程信号传递”) .或者它可能已经阻塞了信号——在这种情况下,当进程解除阻塞时,信号被传递,或者如果进程同时忽略它,它被取消。

另一方面,如果您(或正在运行的进程)更改了终端设置,使得 Ctrl+C 不被解释为产生信号的组合键,那么该进程将从输入中读取 Ctrl+C。当然,会发生什么取决于进程如何处理它读取的输入。

简而言之,如果您没有更改 SIGINT 的默认行为并且您没有更改终端的设置,则 Ctrl+C 会引发 SIGINT;默认操作是终止进程,因此套接字将关闭并终止连接。

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2016-12-19
    • 2021-05-22
    • 2014-06-28
    • 2023-03-19
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多