| // ServerSocket.java | |
| /* Copyright (C) 1999 Free Software Foundation | |
| This file is part of libgcj. | |
| This software is copyrighted work licensed under the terms of the | |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for | |
| details. */ | |
| /** | |
| * @author Per Bothner <bothner@cygnus.com> | |
| * @date January 6, 1999. | |
| */ | |
| /** Written using on-line Java Platform 1.2 API Specification. | |
| * Status: I believe all methods are implemented. | |
| */ | |
| package java.net; | |
| import java.io.*; | |
| public class ServerSocket | |
| { | |
| static SocketImplFactory factory; | |
| SocketImpl impl; | |
| static final byte[] zeros = {0,0,0,0}; | |
| /* dummy InetAddress, used to bind socket to any (all) network interfaces */ | |
| static final InetAddress ANY_IF = new InetAddress(zeros, null); | |
| public ServerSocket (int port) | |
| throws java.io.IOException | |
| { | |
| this(port, 50); | |
| } | |
| public ServerSocket (int port, int backlog) | |
| throws java.io.IOException | |
| { | |
| this(port, backlog, ANY_IF); | |
| } | |
| public ServerSocket (int port, int backlog, InetAddress bindAddr) | |
| throws java.io.IOException | |
| { | |
| if (factory == null) | |
| this.impl = new PlainSocketImpl(); | |
| else | |
| this.impl = factory.createSocketImpl(); | |
| SecurityManager s = System.getSecurityManager(); | |
| if (s != null) | |
| s.checkListen(port); | |
| impl.create(true); | |
| impl.bind(bindAddr == null ? ANY_IF : bindAddr, port); | |
| impl.listen(backlog); | |
| } | |
| public InetAddress getInetAddress() | |
| { | |
| return impl.getInetAddress(); | |
| } | |
| public int getLocalPort() | |
| { | |
| return impl.getLocalPort(); | |
| } | |
| public Socket accept () throws IOException | |
| { | |
| Socket s = new Socket(Socket.factory == null ? new PlainSocketImpl() | |
| : Socket.factory.createSocketImpl()); | |
| implAccept (s); | |
| return s; | |
| } | |
| protected final void implAccept (Socket s) throws IOException | |
| { | |
| impl.accept(s.impl); | |
| } | |
| public void close () throws IOException | |
| { | |
| impl.close(); | |
| } | |
| public synchronized void setSoTimeout (int timeout) throws SocketException | |
| { | |
| if (timeout < 0) | |
| throw new IllegalArgumentException("Invalid timeout: " + timeout); | |
| impl.setOption(SocketOptions.SO_TIMEOUT, new Integer(timeout)); | |
| } | |
| public synchronized int getSoTimeout () throws SocketException | |
| { | |
| Object timeout = impl.getOption(SocketOptions.SO_TIMEOUT); | |
| if (timeout instanceof Integer) | |
| return ((Integer)timeout).intValue(); | |
| else | |
| return 0; | |
| } | |
| public String toString () | |
| { | |
| return "ServerSocket" + impl.toString(); | |
| } | |
| public static synchronized void setSocketFactory (SocketImplFactory fac) | |
| throws IOException | |
| { | |
| factory = fac; | |
| } | |
| } |