【发布时间】: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