Java:Apache Mina IoAcceptor 无法在 Linux 中解除绑定(bind)

标签 java linux io port mina

所以我正在运行一个带有实例的 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/

相关文章:

c - 这样的定义 "#define __arch_swab32 __arch_swab32"是什么意思?

linux - mod_jk如何处理节点故障

检查非阻塞发送是否成功

php - file_put_contents 说权限被拒绝?

java - 使用 OutputStream/InputStream 的加密和 HMAC(基于流的加密然后 MAC)

java - 位图压缩如何在 android 中工作?

java - 两次判断蓝牙是否开启有什么意义

java - 将数据/对象附加到选项卡式布局中的选项卡

arrays - qsub 作业数组 (-t),等待完成预览任务

swift - 单元测试 WKNavigationDelegate 函数