日期:2014-05-20  浏览次数:20863 次

为什么服务端调用SocketChannel.close之后TCP连接仍然存在?


如题。
用nio的时候,当服务端调用SocketChannel.close之后,客户端没有关闭连接的情况下,用防火墙看到TCP连接仍然存在,要客户端再发送数据过滤才会在客户端抛出异常,然后TCP连接才会被清除。
先调用SocketChannel.socket().close() 再调用ScoketChannel.close() 结果也一样。

还有就是调用SocketChannel.close之后SocketChannel.isConnected仍然返回为ture,是否是因为套接字没有关闭的缘故?

请问有没有什么办法可以做到服务端关闭通道之后TCP连接就立即被清除掉?

谢谢

------解决方案--------------------
你把新建的Socket线程关闭不就行了吗?
------解决方案--------------------


SocketChannel.socket().close();
------解决方案--------------------
TCP protocal就是这样,连接的关闭也要握手的。 不过它应该是有个timeout的,你找找吧。