【问题标题】:How to inform the server when a client is interrupted?客户端中断时如何通知服务器?
【发布时间】:2009-12-26 10:45:57
【问题描述】:

如果客户端中断,如何通知服务器,然后关闭套接字?

【问题讨论】:

    标签: c++ c sockets


    【解决方案1】:

    如果套接字的另一端关闭,您的一端将被标记为可读并从read 返回0 - 这是“文件结束”指示。

    如果您尝试将write 连接到这样的套接字,您将收到SIGPIPE 信号,并且write 将返回错误并将errno 设置为EPIPE(“Broken Pipe”)。您必须准备好处理此事件,因为另一端可以在任何时间关闭套接字。

    【讨论】:

    • 谢谢!你能提供更多关于如何做的细节吗?同样,例如,当在客户端按下 ctrl-c 时,我们是否也应该返回一个 SIGINt 信号?再次感谢您的帮助
    • @Apollo 信号不会在不同计算机之间发送
    • 如果使用 ctrl-c 来终止客户端应用程序,操作系统将关闭连接,并且服务器进程将能够将其检测为文件结束条件。
    • 这不是 X-nix 特有的吗?
    • 谢谢!实际上我正在开发不同的操作系统(Unix 和 win_32)。如何通知正在运行 Windows 的服务器客户端被中断?你能帮帮我吗?再次感谢
    【解决方案2】:

    你需要 TCP_KEEPALIVE

    【讨论】:

    • 谢谢!但是如果按了ctrl-c,我们应该怎么处理呢?
    • Keepalive(SO_KEEPALIVE 是套接字选项的名称,顺便说一句)与它无关。 OP 没有询问是否检测半开连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多