【问题标题】:handle ctrl+c in client-server socket in c programing在 c 编程中处理客户端-服务器套接字中的 ctrl+c
【发布时间】:2019-12-10 06:39:15
【问题描述】:

我用 C 编程语言编写了一个 telnet 服务器。客户端使用此命令连接到服务器:

telnet *IP_Address*

我希望当客户端在其终端按 ctrl+c 时,服务器关闭客户端连接但服务器套接字保持打开状态。为此,将此命令放在 main 函数的第一行:

signal(SIGINT, CtrlC_Handler);

这是 CtrlC_Handler 函数:

void CtrlC_Handler(int sig) {

     close(_c->_client_socket);
}

问题是当客户端在其终端连接中按 ctrl-c 并没有关闭并且命令行终端没有响应客户端时:

但是当服务器套接字关闭时,客户端可以再次输入终端。服务器和客户端在不同的服务器中。任何人都可以帮助我在这种情况下如何捕获 ctrl+c 信号?

【问题讨论】:

  • 您的客户端代码是否能正确处理因在信号处理程序中关闭套接字而导致的所有EINVAL 错误?您的客户端代码是什么
  • @user207421:客户端是telnet。它不是“OP 的客户端”,它是一个标准的命令行工具。
  • @user207421 :我使用 telnet 命令行工具。我自己没有编写客户端代码
  • 在客户端按下 Ctrl-C 不会向服务器发送信号,而是向……好吧……客户端发送信号。

标签: c sockets signal-handling ctrl


【解决方案1】:

您的服务器处理中断信号,当运行 服务器 的终端获得 Ctrl-C 时,进程将收到该信号。与telnet中按下Ctrl-C无关。

telnet 通过发送两个控制序列对Ctrl-C 做出反应:

您可以对接收到这些序列做出反应(具体而言,在您的情况下是第一个;对第二个做出反应应该是 telnet 协议的强制性要求,但如果您断开连接,这将是一个有争议的问题:P)。

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 2016-02-09
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    相关资源
    最近更新 更多