Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/nio/channels/SocketChannel/AdaptSocket.java
38828 views
1
/*
2
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* @test
25
* @summary Unit test for socket-channel adaptors
26
* @library ..
27
*/
28
29
import java.io.*;
30
import java.net.*;
31
import java.nio.channels.*;
32
33
34
public class AdaptSocket {
35
36
static java.io.PrintStream out = System.out;
37
38
static void test(TestServers.DayTimeServer dayTimeServer,
39
int timeout,
40
boolean shouldTimeout)
41
throws Exception
42
{
43
out.println();
44
45
InetSocketAddress isa
46
= new InetSocketAddress(dayTimeServer.getAddress(),
47
dayTimeServer.getPort());
48
SocketChannel sc = SocketChannel.open();
49
Socket so = sc.socket();
50
out.println("opened: " + so);
51
out.println(" " + sc);
52
53
//out.println("opts: " + sc.options());
54
so.setTcpNoDelay(true);
55
//so.setTrafficClass(SocketOpts.IP.TOS_THROUGHPUT);
56
so.setKeepAlive(true);
57
so.setSoLinger(true, 42);
58
so.setOOBInline(true);
59
so.setReceiveBufferSize(512);
60
so.setSendBufferSize(512);
61
//out.println(" " + sc.options());
62
63
if (timeout == 0)
64
so.connect(isa);
65
else {
66
try {
67
so.connect(isa, timeout);
68
} catch (SocketTimeoutException x) {
69
if (shouldTimeout) {
70
out.println("Connection timed out, as expected");
71
return;
72
} else {
73
throw x;
74
}
75
}
76
}
77
out.println("connected: " + so);
78
out.println(" " + sc);
79
byte[] bb = new byte[100];
80
int n = so.getInputStream().read(bb);
81
String s = new String(bb, 0, n - 2, "US-ASCII");
82
out.println(isa + " says: \"" + s + "\"");
83
so.shutdownInput();
84
out.println("ishut: " + sc);
85
so.shutdownOutput();
86
out.println("oshut: " + sc);
87
so.close();
88
out.println("closed: " + so);
89
out.println(" " + sc);
90
}
91
92
static String dataString = "foo\r\n";
93
94
static void testRead(Socket so, boolean shouldTimeout)
95
throws Exception
96
{
97
String data = "foo\r\n";
98
so.getOutputStream().write(dataString.getBytes("US-ASCII"));
99
InputStream is = so.getInputStream();
100
try {
101
byte[] b = new byte[100];
102
int n = is.read(b);
103
if (n != 5)
104
throw new Exception("Incorrect number of bytes read: " + n);
105
if (!dataString.equals(new String(b, 0, n, "US-ASCII")))
106
throw new Exception("Incorrect data read: " + n);
107
} catch (SocketTimeoutException x) {
108
if (shouldTimeout) {
109
out.println("Read timed out, as expected");
110
return;
111
}
112
throw x;
113
}
114
}
115
116
static void testRead(TestServers.EchoServer echoServer,
117
int timeout,
118
boolean shouldTimeout)
119
throws Exception
120
{
121
out.println();
122
123
InetSocketAddress isa
124
= new InetSocketAddress(echoServer.getAddress(),
125
echoServer.getPort());
126
SocketChannel sc = SocketChannel.open();
127
sc.connect(isa);
128
Socket so = sc.socket();
129
out.println("connected: " + so);
130
out.println(" " + sc);
131
132
if (timeout > 0)
133
so.setSoTimeout(timeout);
134
out.println("timeout: " + so.getSoTimeout());
135
136
testRead(so, shouldTimeout);
137
for (int i = 0; i < 4; i++) {
138
testRead(so, shouldTimeout);
139
}
140
141
sc.close();
142
}
143
144
public static void main(String[] args) throws Exception {
145
146
try (TestServers.DayTimeServer dayTimeServer
147
= TestServers.DayTimeServer.startNewServer()) {
148
test(dayTimeServer, 0, false);
149
test(dayTimeServer, 1000, false);
150
}
151
152
try (TestServers.DayTimeServer lingerDayTimeServer
153
= TestServers.DayTimeServer.startNewServer(100)) {
154
// this test no longer really test the connection timeout
155
// since there is no way to prevent the server from eagerly
156
// accepting connection...
157
test(lingerDayTimeServer, 10, true);
158
}
159
160
try (TestServers.EchoServer echoServer
161
= TestServers.EchoServer.startNewServer()) {
162
testRead(echoServer, 0, false);
163
testRead(echoServer, 8000, false);
164
}
165
166
try (TestServers.EchoServer lingerEchoServer
167
= TestServers.EchoServer.startNewServer(100)) {
168
testRead(lingerEchoServer, 10, true);
169
}
170
}
171
}
172
173