所以我正在运行一个带有实例的 webapp
org.apache.mina.common.IoAcceptor
这样实例化:
IoAcceptor acceptor = new SocketAcceptor();
SocketAcceptorConfig config = (SocketAcceptorConfig) acceptor.getDefaultConfig();
config.setReuseAddress(true);
config.getFilterChain().addLast("codec", new ProtocolCodecFilter(newFIXProtocolCodecFactory()));
acceptor.bind(new InetSocketAddress(port), clientHandler);
好吧,一切都在顺利进行——我们整天都在郁金香花丛中接受连接,同时与远程客户交谈。
问题出在尝试断开连接时。
到目前为止,我正在尝试一个简单的,
acceptor.unbindAll();
这在 Windows 中似乎工作正常,但是当我部署到我在 Linux 上运行的 Tomcat 服务器时,即使在理论上我应该断开连接之后,该端口似乎仍在监听。 (netstat 和我无法打开此端口的套接字均已确认)
我相信我遇到了同样的问题: http://objectmix.com/apache/717994-unbind-not-working.html
这当然是一个实例: http://xkcd.com/979/
最佳答案
根据 their own test suite , unbind() 应该有效。但是,我发现我需要更加努力才能让它在 Android 上可靠地工作。 YMMV.
acceptor.setCloseOnDeactivation(true);
for (IoSession ss : acceptor.getManagedSessions().values()) {
ss.close(true);
}
acceptor.unbind();
acceptor.dispose();
我差点没忘记告诉你我看到了什么,但 DenverCoder9 的回声把我拉回来了。
关于Java:Apache Mina IoAcceptor 无法在 Linux 中解除绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884501/