【问题标题】:Detecting client ctrl-c sockets检测客户端 ctrl-c 套接字
【发布时间】:2018-09-25 09:51:59
【问题描述】:

我正在尝试检测我的套接字的客户端何时使用 ctrl-c 断开连接,然后忽略它。

我知道 signal(SIGINT, SIG_IGN) 但是当我把它放在我的服务器端时,它只是在服务器端创建了 ignore-ctrl-c,这不是我想要的。

如何将此行为仅应用于客户端,以便在客户端退出后服务器将继续运行? 我不控制客户端的代码。

【问题讨论】:

  • 客户端不使用 Ctrl-C 断开连接。当本地用户按下 Ctrl-C 时,操作系统会向进程发送 SIGINT... 我很乐意回答您的实际问题,但我不确定我是否理解。
  • 你的意思是 SIGPIPE 吗?
  • 说话是骗人的;向我们展示代码。
  • 澄清一下,如果客户意外退出,我想忽略它并继续
  • 如果我误用了术语,我们深表歉意

标签: c sockets server signals copy-paste


【解决方案1】:

没有办法检测客户端上的 Ctrl-C,因为没有此类信息通过套接字传输 - 除非您的客户端应用程序专门设计用于传输此类信息。但是,除非您在客户端中专门处理 Ctrl-C,否则它只会退出,这将导致套接字关闭。这种套接字关闭可以通过读取套接字来检测:它不会返回任何数据,也不会返回错误作为套接字关闭的标志。您不会以这种方式检测到套接字关闭的原因,即您不知道它是否是由显式 Ctrl-C 引起的,因为客户端崩溃了,或者客户端是否刚刚关闭了套接字但它仍在运行.

【讨论】:

  • 更准确地说,只有当连接优雅关闭(客户端发送 TCP FIN 数据包)时,读取操作才会报告接收到的 0 个字节且没有错误代码。否则,如果连接异常丢失,读取操作将失败(最终超时后)并显示错误代码。
猜你喜欢
  • 2013-12-10
  • 2021-11-14
  • 2016-08-06
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多