1

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

好吧,一切都很顺利——我们在与远程客户交谈的同时,整天都在郁金香的田野上接受连接。

问题是尝试断开连接时。

到目前为止,我正在尝试一个简单的,

接受者.unbindAll();

这在 Windows 中似乎工作正常,但是当我部署到在 linux 上运行的 Tomcat 服务器时,即使理论上我应该断开连接,端口似乎也在监听。(netstat 和我无法打开此端口的套接字都确认)

我相信我有同样的问题:http: //objectmix.com/apache/717994-unbind-not-working.html

这当然是一个实例:http: //xkcd.com/979/

4

1 回答 1

2

根据他们自己的测试套件, unbind() 应该可以工作。但是,我发现我需要更加有力地让它在 Android 上可靠地工作。YMMV。

acceptor.setCloseOnDeactivation(true);
for (IoSession ss : acceptor.getManagedSessions().values()) {
  ss.close(true);
}
acceptor.unbind();
acceptor.dispose();

我几乎不记得告诉你我看到了什么就继续前进,但 DenverCoder9 的回声让我回想起。

于 2013-05-11T02:24:02.583 回答