当前,在我们的应用程序中,我们使用java nio阻塞套接字通道将数据写出。
socketChannel = SocketChannel.open();
socketChannel.setOption(StandardSocketOptions.SO_KEEPALIVE, config.getConnectionKeepAlive());
socketChannel.configureBlocking(true);
protected void trySendEvent(final Object inputEvent) {
final byte[] eventAsBytes = (byte[]) inputEvent;
final ByteBuffer buffer = ByteBuffer.allocate(eventAsBytes.length);
buffer.put(eventAsBytes);
buffer.flip();
int bytesWritten;
try {
bytesWritten = writeEvent(buffer , eventAsBytes);
} catch (final IOException e) {
log.error("No connection with client.");
reconnect();
try {
bytesWritten = writeEvent(buffer , eventAsBytes);
} catch (final IOException ex) {
log.error("Failed to send event to client.");
}
}
}
重置来自对等客户端的连接后,我们的应用程序将依赖IO异常来标识关闭的连接并重新连接。
尽管连接已关闭,但在填充本地TCP缓冲区之前不会引发IO异常,这意味着前几次写入将在缓冲区中,并且永远不会引发异常。因此前几条写入操作丢失,并且从未发送到客户端
所以我的问题是。 有什么可靠的方法可以检查套接字的状态吗?
“根据java文档,如果套接字在不是当前状态之前连接,则返回true”
感谢您的帮助!