History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/javax/net/ServerSocketFactory.java (1 of 18352 files). Show all

Unified · Split

java/pkg/javax/net/ServerSocketFactory.java+233−0
@@ -0,0 +1,233 @@
1+/*
2+ * Copyright (c) 1997, 2007, 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 javax.net;
27+
28+import java.io.IOException;
29+import java.net.InetAddress;
30+import java.net.ServerSocket;
31+import java.net.SocketException;
32+
33+/**
34+ * This class creates server sockets. It may be subclassed by other
35+ * factories, which create particular types of server sockets. This
36+ * provides a general framework for the addition of public socket-level
37+ * functionality. It is the server side analogue of a socket factory,
38+ * and similarly provides a way to capture a variety of policies related
39+ * to the sockets being constructed.
40+ *
41+ * <P> Like socket factories, server Socket factory instances have
42+ * methods used to create sockets. There is also an environment
43+ * specific default server socket factory; frameworks will often use
44+ * their own customized factory.
45+ *
46+ * @since 1.4
47+ * @see SocketFactory
48+ *
49+ * @author David Brownell
50+ */
51+public abstract class ServerSocketFactory
52+{
53+ //
54+ // NOTE: JDK 1.1 bug in class GC, this can get collected
55+ // even though it's always accessible via getDefault().
56+ //
57+ private static ServerSocketFactory theFactory;
58+
59+
60+ /**
61+ * Creates a server socket factory.
62+ */
63+ protected ServerSocketFactory() { /* NOTHING */ }
64+
65+ /**
66+ * Returns a copy of the environment's default socket factory.
67+ *
68+ * @return the <code>ServerSocketFactory</code>
69+ */
70+ public static ServerSocketFactory getDefault()
71+ {
72+ synchronized (ServerSocketFactory.class) {
73+ if (theFactory == null) {
74+ //
75+ // Different implementations of this method could
76+ // work rather differently. For example, driving
77+ // this from a system property, or using a different
78+ // implementation than JavaSoft's.
79+ //
80+ theFactory = new DefaultServerSocketFactory();
81+ }
82+ }
83+
84+ return theFactory;
85+ }
86+
87+
88+ /**
89+ * Returns an unbound server socket. The socket is configured with
90+ * the socket options (such as accept timeout) given to this factory.
91+ *
92+ * @return the unbound socket
93+ * @throws IOException if the socket cannot be created
94+ * @see java.net.ServerSocket#bind(java.net.SocketAddress)
95+ * @see java.net.ServerSocket#bind(java.net.SocketAddress, int)
96+ * @see java.net.ServerSocket#ServerSocket()
97+ */
98+ public ServerSocket createServerSocket() throws IOException {
99+ throw new SocketException("Unbound server sockets not implemented");
100+ }
101+
102+ /**
103+ * Returns a server socket bound to the specified port.
104+ * The socket is configured with the socket options
105+ * (such as accept timeout) given to this factory.
106+ * <P>
107+ * If there is a security manager, its <code>checkListen</code>
108+ * method is called with the <code>port</code> argument as its
109+ * argument to ensure the operation is allowed. This could result
110+ * in a SecurityException.
111+ *
112+ * @param port the port to listen to
113+ * @return the <code>ServerSocket</code>
114+ * @throws IOException for networking errors
115+ * @throws SecurityException if a security manager exists and its
116+ * <code>checkListen</code> method doesn't allow the operation.
117+ * @throws IllegalArgumentException if the port parameter is outside the
118+ * specified range of valid port values, which is between 0 and
119+ * 65535, inclusive.
120+ * @see SecurityManager#checkListen
121+ * @see java.net.ServerSocket#ServerSocket(int)
122+ */
123+ public abstract ServerSocket createServerSocket(int port)
124+ throws IOException;
125+
126+
127+ /**
128+ * Returns a server socket bound to the specified port, and uses the
129+ * specified connection backlog. The socket is configured with
130+ * the socket options (such as accept timeout) given to this factory.
131+ * <P>
132+ * The <code>backlog</code> argument must be a positive
133+ * value greater than 0. If the value passed if equal or less
134+ * than 0, then the default value will be assumed.
135+ * <P>
136+ * If there is a security manager, its <code>checkListen</code>
137+ * method is called with the <code>port</code> argument as its
138+ * argument to ensure the operation is allowed. This could result
139+ * in a SecurityException.
140+ *
141+ * @param port the port to listen to
142+ * @param backlog how many connections are queued
143+ * @return the <code>ServerSocket</code>
144+ * @throws IOException for networking errors
145+ * @throws SecurityException if a security manager exists and its
146+ * <code>checkListen</code> method doesn't allow the operation.
147+ * @throws IllegalArgumentException if the port parameter is outside the
148+ * specified range of valid port values, which is between 0 and
149+ * 65535, inclusive.
150+ * @see SecurityManager#checkListen
151+ * @see java.net.ServerSocket#ServerSocket(int, int)
152+ */
153+ public abstract ServerSocket
154+ createServerSocket(int port, int backlog)
155+ throws IOException;
156+
157+
158+ /**
159+ * Returns a server socket bound to the specified port,
160+ * with a specified listen backlog and local IP.
161+ * <P>
162+ * The <code>ifAddress</code> argument can be used on a multi-homed
163+ * host for a <code>ServerSocket</code> that will only accept connect
164+ * requests to one of its addresses. If <code>ifAddress</code> is null,
165+ * it will accept connections on all local addresses. The socket is
166+ * configured with the socket options (such as accept timeout) given
167+ * to this factory.
168+ * <P>
169+ * The <code>backlog</code> argument must be a positive
170+ * value greater than 0. If the value passed if equal or less
171+ * than 0, then the default value will be assumed.
172+ * <P>
173+ * If there is a security manager, its <code>checkListen</code>
174+ * method is called with the <code>port</code> argument as its
175+ * argument to ensure the operation is allowed. This could result
176+ * in a SecurityException.
177+ *
178+ * @param port the port to listen to
179+ * @param backlog how many connections are queued
180+ * @param ifAddress the network interface address to use
181+ * @return the <code>ServerSocket</code>
182+ * @throws IOException for networking errors
183+ * @throws SecurityException if a security manager exists and its
184+ * <code>checkListen</code> method doesn't allow the operation.
185+ * @throws IllegalArgumentException if the port parameter is outside the
186+ * specified range of valid port values, which is between 0 and
187+ * 65535, inclusive.
188+ * @see SecurityManager#checkListen
189+ * @see java.net.ServerSocket#ServerSocket(int, int, java.net.InetAddress)
190+ */
191+ public abstract ServerSocket
192+ createServerSocket(int port, int backlog, InetAddress ifAddress)
193+ throws IOException;
194+}
195+
196+
197+//
198+// The default factory has NO intelligence. In fact it's not clear
199+// what sort of intelligence servers need; the onus is on clients,
200+// who have to know how to tunnel etc.
201+//
202+class DefaultServerSocketFactory extends ServerSocketFactory {
203+
204+ DefaultServerSocketFactory()
205+ {
206+ /* NOTHING */
207+ }
208+
209+ public ServerSocket createServerSocket()
210+ throws IOException
211+ {
212+ return new ServerSocket();
213+ }
214+
215+ public ServerSocket createServerSocket(int port)
216+ throws IOException
217+ {
218+ return new ServerSocket(port);
219+ }
220+
221+ public ServerSocket createServerSocket(int port, int backlog)
222+ throws IOException
223+ {
224+ return new ServerSocket(port, backlog);
225+ }
226+
227+ public ServerSocket
228+ createServerSocket(int port, int backlog, InetAddress ifAddress)
229+ throws IOException
230+ {
231+ return new ServerSocket(port, backlog, ifAddress);
232+ }
233+}