【问题标题】:What happens in case of writing/closing a java.net.Socket closed by peer?如果写入/关闭被对等方关闭的 java.net.Socket 会发生什么?
【发布时间】:2012-06-21 13:38:13
【问题描述】:

假设我有一个java.net.Socket 的实例,它是两个对等点(Windows 进程)之间连接的端点:我的进程和远程进程。远程进程退出并关闭了它的连接。现在我正在尝试writeclose 我的套接字。

我希望 writeclose 调用(或其中一个)失败并引发异常(就像 Unix 套接字 API 中的 SIGPIPE 信号一样),但它们会成功。

在这种情况下java.net.Socket 的预期行为是什么?它与 Unix 套接字 API 行为有什么不同?它在 Windows 和 Linux 中的工作方式相同吗?

【问题讨论】:

    标签: java windows sockets network-programming


    【解决方案1】:

    嗯,情况与管道有点不同,因为操作系统不一定知道另一端已经关闭了连接。所以......理论上......对套接字的许多写入可能会起作用。但是,如果远程机器仍在网络上,那么编写器最终应该会得到一个异常。很有可能它会被扔到flushclose 的套接字中。

    FWIW,java.net.Socket 的行为很大程度上取决于操作系统协议栈的工作方式。

    【讨论】:

    • 看起来close 也没有引发任何异常。
    • 是的。但其中一个对等进程已关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多