blob: bc1b072fa2defbd7c7a0c32a09d090e625820b87 [file] [log] [blame]
// 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;
}
}