1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.testsuite.transport.socket;
17
18 import io.netty.bootstrap.Bootstrap;
19 import io.netty.bootstrap.ServerBootstrap;
20 import io.netty.channel.Channel;
21 import io.netty.channel.ChannelHandlerContext;
22 import io.netty.channel.ChannelInboundHandlerAdapter;
23 import io.netty.channel.socket.SocketChannel;
24 import org.junit.jupiter.api.Test;
25 import org.junit.jupiter.api.TestInfo;
26
27 public class SocketCloseForciblyTest extends AbstractSocketTest {
28
29 @Test
30 public void testCloseForcibly(TestInfo testInfo) throws Throwable {
31 run(testInfo, new Runner<ServerBootstrap, Bootstrap>() {
32 @Override
33 public void run(ServerBootstrap serverBootstrap, Bootstrap bootstrap) throws Throwable {
34 testCloseForcibly(serverBootstrap, bootstrap);
35 }
36 });
37 }
38
39 public void testCloseForcibly(ServerBootstrap sb, Bootstrap cb) throws Throwable {
40 sb.handler(new ChannelInboundHandlerAdapter() {
41 @Override
42 public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
43 SocketChannel childChannel = (SocketChannel) msg;
44 childChannel.config().setSoLinger(0);
45 childChannel.unsafe().closeForcibly();
46 }
47 }).childHandler(new ChannelInboundHandlerAdapter());
48
49 cb.handler(new ChannelInboundHandlerAdapter());
50
51 Channel sc = sb.bind().sync().channel();
52
53 cb.connect(sc.localAddress()).channel().closeFuture().syncUninterruptibly();
54 sc.close().sync();
55 }
56 }