Linindoo opened a new issue, #754:
URL: https://github.com/apache/mina-sshd/issues/754
### Version
sshd-client:2.15.0
### Bug description
It throw `Address already in use: bind` Exception after invoke
`startLocalPortForwarding` , and then invoke `startLocalPortForwarding` at
the same port again, it throw `TcpipForwarder is closed or closing: Closed`
exception, the Port Forwarding can't restart until create new `ClientSession` .
### Actual behavior
Port forwarding was closed after throw `Address already in use: bind`
exception,and can't restart in the same `ClientSession` until create new
instance
### Expected behavior
No matter how many times invoke It should throw the same exception `Address
already in use: bind` ,it should invoke `startLocalPortForwarding` success
after solve the local port conflict problem at the same `ClientSession` instance
### Relevant log output
```Shell
java.net.BindException: Address already in use: bind
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Net.java:555)
at
java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
at
java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
at
io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:141)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562)
at
io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1334)
at
io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:506)
at
io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:491)
at io.netty.handler.logging.LoggingHandler.bind(LoggingHandler.java:230)
at
io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:506)
at
io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:491)
at
io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:973)
at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:260)
at
io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:356)
at
io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:167)
at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at
io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java)
at
io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:836)
at
io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:827)
at
io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:817)
at
io.netty.bootstrap.AbstractBootstrap.doBind0(AbstractBootstrap.java:352)
at
io.netty.bootstrap.AbstractBootstrap.access$000(AbstractBootstrap.java:53)
at
io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:299)
at
io.netty.bootstrap.AbstractBootstrap$1.operationComplete(AbstractBootstrap.java:286)
at
io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
at
io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552)
at
io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
at
io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
at
io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
at
io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
at
io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:990)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:516)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429)
at
io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486)
at
io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:167)
at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
at --- Async.Stack.Trace --- (captured by IntelliJ IDEA debugger)
at
io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java)
at
io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:836)
at
io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:827)
at
io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:817)
at
io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:483)
at
io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:89)
at
io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:83)
at
io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86)
at
io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:323)
at
io.netty.bootstrap.AbstractBootstrap.doBind(AbstractBootstrap.java:272)
at io.netty.bootstrap.AbstractBootstrap.bind(AbstractBootstrap.java:268)
at
org.apache.sshd.netty.NettyIoAcceptor.bindInternal(NettyIoAcceptor.java:151)
at org.apache.sshd.netty.NettyIoAcceptor.bind(NettyIoAcceptor.java:141)
at
org.apache.sshd.common.forward.DefaultForwarder.doBind(DefaultForwarder.java:937)
at
org.apache.sshd.common.forward.DefaultForwarder.startLocalPortForwarding(DefaultForwarder.java:194)
at
org.apache.sshd.client.session.AbstractClientSession.startLocalPortForwarding(AbstractClientSession.java:446)
at cn.olange.SshDDemo.main(SshDDemo.java:56)
java.lang.IllegalStateException: TcpipForwarder is closed or closing: Closed
at
org.apache.sshd.common.forward.DefaultForwarder.startLocalPortForwarding(DefaultForwarder.java:186)
at
org.apache.sshd.client.session.AbstractClientSession.startLocalPortForwarding(AbstractClientSession.java:446)
at cn.olange.SshDDemo.main(SshDDemo.java:63)
```
### Other information
`
SshClient client = SshClient.setUpDefaultClient();
List<KeyExchangeFactory> keyExchangeFactories =
BaseBuilder.DEFAULT_KEX_PREFERENCE
.stream()
.map(ClientBuilder.DH2KEX)
.toList();
client.setKeyExchangeFactories(keyExchangeFactories);
client.setCipherFactories(new
ArrayList<>(NamedFactory.setUpBuiltinFactories(false,
BaseBuilder.DEFAULT_CIPHERS_PREFERENCE)));
client.setMacFactories(new
ArrayList<>(NamedFactory.setUpBuiltinFactories(false,
BaseBuilder.DEFAULT_MAC_PREFERENCE)));
client.setSignatureFactories(new
ArrayList<>(NamedFactory.setUpBuiltinFactories(false,
BaseBuilder.DEFAULT_SIGNATURE_PREFERENCE)));
client.start();
ClientSession session = null;
try {
session = client
.connect("root", "host", 22)
.verify(1000)
.getSession();
session.addPasswordIdentity("password");
session.auth().verify(10000);
session.startLocalPortForwarding(new
SshdSocketAddress("127.0.0.1", 3306), new SshdSocketAddress("127.0.0.1", 3306));
System.out.println("connection success");
} catch (IOException e) {
e.printStackTrace();
try {
session.startLocalPortForwarding(new
SshdSocketAddress("127.0.0.1", 3306), new SshdSocketAddress("127.0.0.1", 3306));
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]