Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/java/nio/channels/ServerSocketChannel.java
38918 views
1
/*
2
* Copyright (c) 2000, 2013, 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. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package java.nio.channels;
27
28
import java.io.IOException;
29
import java.net.ServerSocket;
30
import java.net.SocketOption;
31
import java.net.SocketAddress;
32
import java.nio.channels.spi.AbstractSelectableChannel;
33
import java.nio.channels.spi.SelectorProvider;
34
35
/**
36
* A selectable channel for stream-oriented listening sockets.
37
*
38
* <p> A server-socket channel is created by invoking the {@link #open() open}
39
* method of this class. It is not possible to create a channel for an arbitrary,
40
* pre-existing {@link ServerSocket}. A newly-created server-socket channel is
41
* open but not yet bound. An attempt to invoke the {@link #accept() accept}
42
* method of an unbound server-socket channel will cause a {@link NotYetBoundException}
43
* to be thrown. A server-socket channel can be bound by invoking one of the
44
* {@link #bind(java.net.SocketAddress,int) bind} methods defined by this class.
45
*
46
* <p> Socket options are configured using the {@link #setOption(SocketOption,Object)
47
* setOption} method. Server-socket channels support the following options:
48
* <blockquote>
49
* <table border summary="Socket options">
50
* <tr>
51
* <th>Option Name</th>
52
* <th>Description</th>
53
* </tr>
54
* <tr>
55
* <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
56
* <td> The size of the socket receive buffer </td>
57
* </tr>
58
* <tr>
59
* <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
60
* <td> Re-use address </td>
61
* </tr>
62
* </table>
63
* </blockquote>
64
* Additional (implementation specific) options may also be supported.
65
*
66
* <p> Server-socket channels are safe for use by multiple concurrent threads.
67
* </p>
68
*
69
* @author Mark Reinhold
70
* @author JSR-51 Expert Group
71
* @since 1.4
72
*/
73
74
public abstract class ServerSocketChannel
75
extends AbstractSelectableChannel
76
implements NetworkChannel
77
{
78
79
/**
80
* Initializes a new instance of this class.
81
*
82
* @param provider
83
* The provider that created this channel
84
*/
85
protected ServerSocketChannel(SelectorProvider provider) {
86
super(provider);
87
}
88
89
/**
90
* Opens a server-socket channel.
91
*
92
* <p> The new channel is created by invoking the {@link
93
* java.nio.channels.spi.SelectorProvider#openServerSocketChannel
94
* openServerSocketChannel} method of the system-wide default {@link
95
* java.nio.channels.spi.SelectorProvider} object.
96
*
97
* <p> The new channel's socket is initially unbound; it must be bound to a
98
* specific address via one of its socket's {@link
99
* java.net.ServerSocket#bind(SocketAddress) bind} methods before
100
* connections can be accepted. </p>
101
*
102
* @return A new socket channel
103
*
104
* @throws IOException
105
* If an I/O error occurs
106
*/
107
public static ServerSocketChannel open() throws IOException {
108
return SelectorProvider.provider().openServerSocketChannel();
109
}
110
111
/**
112
* Returns an operation set identifying this channel's supported
113
* operations.
114
*
115
* <p> Server-socket channels only support the accepting of new
116
* connections, so this method returns {@link SelectionKey#OP_ACCEPT}.
117
* </p>
118
*
119
* @return The valid-operation set
120
*/
121
public final int validOps() {
122
return SelectionKey.OP_ACCEPT;
123
}
124
125
126
// -- ServerSocket-specific operations --
127
128
/**
129
* Binds the channel's socket to a local address and configures the socket
130
* to listen for connections.
131
*
132
* <p> An invocation of this method is equivalent to the following:
133
* <blockquote><pre>
134
* bind(local, 0);
135
* </pre></blockquote>
136
*
137
* @param local
138
* The local address to bind the socket, or {@code null} to bind
139
* to an automatically assigned socket address
140
*
141
* @return This channel
142
*
143
* @throws AlreadyBoundException {@inheritDoc}
144
* @throws UnsupportedAddressTypeException {@inheritDoc}
145
* @throws ClosedChannelException {@inheritDoc}
146
* @throws IOException {@inheritDoc}
147
* @throws SecurityException
148
* If a security manager has been installed and its {@link
149
* SecurityManager#checkListen checkListen} method denies the
150
* operation
151
*
152
* @since 1.7
153
*/
154
public final ServerSocketChannel bind(SocketAddress local)
155
throws IOException
156
{
157
return bind(local, 0);
158
}
159
160
/**
161
* Binds the channel's socket to a local address and configures the socket to
162
* listen for connections.
163
*
164
* <p> This method is used to establish an association between the socket and
165
* a local address. Once an association is established then the socket remains
166
* bound until the channel is closed.
167
*
168
* <p> The {@code backlog} parameter is the maximum number of pending
169
* connections on the socket. Its exact semantics are implementation specific.
170
* In particular, an implementation may impose a maximum length or may choose
171
* to ignore the parameter altogther. If the {@code backlog} parameter has
172
* the value {@code 0}, or a negative value, then an implementation specific
173
* default is used.
174
*
175
* @param local
176
* The address to bind the socket, or {@code null} to bind to an
177
* automatically assigned socket address
178
* @param backlog
179
* The maximum number of pending connections
180
*
181
* @return This channel
182
*
183
* @throws AlreadyBoundException
184
* If the socket is already bound
185
* @throws UnsupportedAddressTypeException
186
* If the type of the given address is not supported
187
* @throws ClosedChannelException
188
* If this channel is closed
189
* @throws IOException
190
* If some other I/O error occurs
191
* @throws SecurityException
192
* If a security manager has been installed and its {@link
193
* SecurityManager#checkListen checkListen} method denies the
194
* operation
195
*
196
* @since 1.7
197
*/
198
public abstract ServerSocketChannel bind(SocketAddress local, int backlog)
199
throws IOException;
200
201
/**
202
* @throws UnsupportedOperationException {@inheritDoc}
203
* @throws IllegalArgumentException {@inheritDoc}
204
* @throws ClosedChannelException {@inheritDoc}
205
* @throws IOException {@inheritDoc}
206
*
207
* @since 1.7
208
*/
209
public abstract <T> ServerSocketChannel setOption(SocketOption<T> name, T value)
210
throws IOException;
211
212
/**
213
* Retrieves a server socket associated with this channel.
214
*
215
* <p> The returned object will not declare any public methods that are not
216
* declared in the {@link java.net.ServerSocket} class. </p>
217
*
218
* @return A server socket associated with this channel
219
*/
220
public abstract ServerSocket socket();
221
222
/**
223
* Accepts a connection made to this channel's socket.
224
*
225
* <p> If this channel is in non-blocking mode then this method will
226
* immediately return <tt>null</tt> if there are no pending connections.
227
* Otherwise it will block indefinitely until a new connection is available
228
* or an I/O error occurs.
229
*
230
* <p> The socket channel returned by this method, if any, will be in
231
* blocking mode regardless of the blocking mode of this channel.
232
*
233
* <p> This method performs exactly the same security checks as the {@link
234
* java.net.ServerSocket#accept accept} method of the {@link
235
* java.net.ServerSocket} class. That is, if a security manager has been
236
* installed then for each new connection this method verifies that the
237
* address and port number of the connection's remote endpoint are
238
* permitted by the security manager's {@link
239
* java.lang.SecurityManager#checkAccept checkAccept} method. </p>
240
*
241
* @return The socket channel for the new connection,
242
* or <tt>null</tt> if this channel is in non-blocking mode
243
* and no connection is available to be accepted
244
*
245
* @throws ClosedChannelException
246
* If this channel is closed
247
*
248
* @throws AsynchronousCloseException
249
* If another thread closes this channel
250
* while the accept operation is in progress
251
*
252
* @throws ClosedByInterruptException
253
* If another thread interrupts the current thread
254
* while the accept operation is in progress, thereby
255
* closing the channel and setting the current thread's
256
* interrupt status
257
*
258
* @throws NotYetBoundException
259
* If this channel's socket has not yet been bound
260
*
261
* @throws SecurityException
262
* If a security manager has been installed
263
* and it does not permit access to the remote endpoint
264
* of the new connection
265
*
266
* @throws IOException
267
* If some other I/O error occurs
268
*/
269
public abstract SocketChannel accept() throws IOException;
270
271
/**
272
* {@inheritDoc}
273
* <p>
274
* If there is a security manager set, its {@code checkConnect} method is
275
* called with the local address and {@code -1} as its arguments to see
276
* if the operation is allowed. If the operation is not allowed,
277
* a {@code SocketAddress} representing the
278
* {@link java.net.InetAddress#getLoopbackAddress loopback} address and the
279
* local port of the channel's socket is returned.
280
*
281
* @return The {@code SocketAddress} that the socket is bound to, or the
282
* {@code SocketAddress} representing the loopback address if
283
* denied by the security manager, or {@code null} if the
284
* channel's socket is not bound
285
*
286
* @throws ClosedChannelException {@inheritDoc}
287
* @throws IOException {@inheritDoc}
288
*/
289
@Override
290
public abstract SocketAddress getLocalAddress() throws IOException;
291
292
}
293
294