【问题标题】:Java socketChannel to detect disorderly closed connectionJava socketChannel检测无序关闭的连接
【发布时间】:2017-05-04 11:14:19
【问题描述】:

我知道 SocketChannel 通过在调用 read() 后接收到“-1”来“通知”有序关闭的连接。

但是它如何通知我一个无序关闭的连接? (作为整个基于 NIO 的服务器的一部分,使用选择器和非阻塞 socketChannels)

【问题讨论】:

  • 为什么会有-1这个问题?它有什么问题?你能做的最低限度是解释。
  • 您收到“-1”是因为您有一个有序关闭的连接 :)

标签: java sockets nio socketchannel


【解决方案1】:

write() 将抛出 IOException: connection reset。最终。由于 TCP 缓冲,它不会在失败后的第一次写入时发生。

【讨论】:

  • 感谢@EJP,但这是唯一的方法吗?如果我只希望作为服务器读取呢?
  • 还有,如果乱关闭后调用socket.close()会怎样?它会因为等待 OS tcp 连接关闭而阻塞吗?
  • 如果您只阅读,您可能会或可能不会获得重置。 close() 永远不会等待,除非你处于阻塞模式并且对 SO_LINGER 做了一些愚蠢的事情。
猜你喜欢
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2018-03-07
  • 2013-02-02
  • 1970-01-01
  • 2017-01-17
  • 2015-12-16
  • 2013-01-07
相关资源
最近更新 更多