我正在了解一个基于服务器和各种客户端的应用程序,但我在发送命令时遇到问题。每当我在客户端执行ctrl+c操作时,发送操作都会杀死所在的线程和正在运行的进程(为了拥有多个客户端,我将一个线程设置为其中一个)。
如果客户端正确结束(执行关闭套接字),服务器不会死亡,但是当我在客户端上使用ctrl+组合时,两者都会退出。c
我该怎么做才能防止发送命令出现这种行为?
提前致谢
让我总结一下我认为您的问题是:每当您点击ctrl+c关闭客户端时,服务器就会退出。并且您希望以服务器不会像上面那样崩溃的方式处理此行为。如果这是真的,请继续阅读,我想我也许能够阐明实际问题,它与使用(或不使用)正确的信号句柄并没有太大关系。
ctrl当您使用+关闭客户端时c,操作系统将停止客户端进程并关闭它打开的所有套接字。作为其中的一部分,FIN 将被发送到服务器。
请检查您的代码。我相信您会以一种在来自相关客户端的套接字的 read() 调用中被阻止的方式编写代码。现在,当上面发送的 FIN 到达服务器端套接字时,此读取将返回值 0。
如果您的代码不检查这种情况并尝试将某些内容写回客户端,最终(我跳过中间发生的几个步骤)它将收到 SIGPIPE。这将导致您的服务器崩溃。
如果上述情况成立,您有 2 个出路: 1. 检查 read() 返回 0 并优雅地继续。2.安装SIGPIPE信号处理程序。
顺便说一句,我更喜欢第一种方法。
| 归档时间: |
|
| 查看次数: |
18650 次 |
| 最近记录: |