1

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

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

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

4

1 回答 1

1

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

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

于 2012-06-21T13:47:27.207 回答