Java NIO套接字阻止通道已连接/打开

时间:2019-01-24 21:05:58

标签: java nio socketchannel

当前,在我们的应用程序中,我们使用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”

感谢您的帮助!

0 个答案:

没有答案