使用 0 值调用 setSoLinger 与根本不启用 soLinger 有什么区别?

mmo*_*son 5 java sockets

在 Java 中,使用 Socket.setSoLinger(true, 0) 设置套接字和根本不调用 setSoLinger 有区别吗?套接字的关闭方式有区别吗?

我已经查看了 Java 源代码,我没有看到关于 soLinger 的套接字关闭有什么特别之处。这让我相信这是操作系统特定的行为。就我而言,我在 Linux 上工作。

Zak*_*aki 3

当通过 指定超时时setSoLinger()close()将阻塞,直到关闭握手完成,或者直到指定的时间过去。

但是,close()即使在关闭序列完成之前设置的时间限制已setSoLinger()过期,也不会提供关闭握手未能完成的指示。

换句话说,setSoLinger()在当前实现中不为应用程序提供任何额外的保证。

这是信息来源。