Hi all,
Below scenario when repeated in a loop produced *"Address already in use'*
exception.
- Start server
- Sync start
- Stop
- Sync stop
Is it not guaranteed to release the server port even when the server socket
is deactivated ?
netty *4.1.41.Final* on *openjdk-11.0.3*
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import java.net.InetSocketAddress;
public class NettySequencingServer {
private final int port;
public NettySequencingServer(int port) {
this.port = port;
}
public static void main(String[] args) throws Exception {
int port = 5000;
NettySequencingServer nettySequencingServer = new
NettySequencingServer(port);
for (int i = 0; i < 10000; i++) {
nettySequencingServer.startStop();
}
}
public void startStop() throws Exception {
final Decoder decoder = new Decoder();
EventLoopGroup group = new NioEventLoopGroup(1);
ServerBootstrap b = new ServerBootstrap();
b.group(group)
.channel(NioServerSocketChannel.class)
.localAddress(new InetSocketAddress(port))
.childHandler(new ChannelInitializer<SocketChannel>(){
@Override
public void initChannel(SocketChannel ch) {
ch.pipeline().addLast(decoder);
}
});
try {
ChannelFuture startFuture = b.bind();
Channel channel = startFuture.channel();
// Start Server
startFuture.sync();
if (!startFuture.isSuccess()) {
System.out.println("Start failed");
}
// Stop Server
ChannelFuture stopFuture = channel.disconnect().sync();
if (!stopFuture.isSuccess()) {
System.out.println("Stop failed");
}
} catch (Exception e) {
System.out.println(e.getMessage());
for (StackTraceElement ele : e.getStackTrace()) {
System.out.println(ele.toString());
}
}
}
}
*Address already in use*
java.base/sun.nio.ch.Net.bind0(Native Method)
java.base/sun.nio.ch.Net.bind(Net.java:461)
java.base/sun.nio.ch.Net.bind(Net.java:453)
java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:227)
io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:132)
io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:551)
io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1346)
io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:503)
io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:488)
io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:985)
io.netty.channel.AbstractChannel.bind(AbstractChannel.java:247)
io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:344)
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510)
io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518)
io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
java.base/java.lang.Thread.run(Thread.java:834)
--
You received this message because you are subscribed to the Google Groups
"Netty discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/netty/CAJt14FNODZsszdGWcKUz%2BmGc6izcTdFFVQy2HQNDrPJRjnaj3g%40mail.gmail.com.