2017-05-04 68 views
0

我知道在调用read()后,SocketChannel通过接收“-1”得到有关有序关闭连接的“通知”。用于检测无序关闭连接的Java socketChannel

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

+1

为什么会有人-1这个问题?这有什么问题吗?你可以解释的最低限度。 – slashms

+1

你收到“-1”是因为你有一个有序的封闭连接:) – avim

回答

1

A write()将抛出IOException: connection reset。最终。由于TCP缓冲,故障发生后的第一次写操作不会发生。

+0

谢谢@EJP,但那是唯一的方法?如果我只希望读作服务器呢? – slashms

+0

另外,如果在无序关闭后会发生什么,我将调用socket.close()?会阻塞它,因为它可能会等待操作系统TCP连接关闭? – slashms

+1

如果你只读,你可能会也可能不会得到重置。 'close()'永远不会等待,除非你处于阻塞模式并且对SO_LINGER做了愚蠢的事情。 – EJP