gcc/libjava/java/net/Socket.java
Warren Levy f2ed9e9656 [multiple changes]
1999-05-26  Bryce McKinlay <bryce@albatross.co.nz>
	* java/net/DatagramSocket.java (getSoTimeout): Verify class type.
	* java/net/DatagramSocketImpl.java (getOption): Made abstract.
	(setOption): Made abstract.
	* java/net/PlainDatagramSocketImpl.java: Mirror SocketOptions fields
	to avoid cpp conflicts in native code.
	* java/net/PlainSocketImpl.java: Mirror SocketOptions fields to avoid
	cpp conflicts in native code.
	* java/net/ServerSocket.java (toString): Prepended "ServerSocket".
	* java/net/Socket.java (getLocalAddress): Implemented.
	(setTcpNoDelay): Implemented.
	(getTcpNoDelay): Implemented.
	(setSoLinger): Implemented.
	(getSoLinger): Implemented.
	(getSoTimeout): Verify class type.
	(setSendBufferSize): Implemented.
	(getSendBufferSize): Implemented.
	(setReceiveBufferSize): Implemented.
	(getReceiveBufferSize): Implemented.
	(toString): Prepended "Socket".
	* java/net/SocketImpl.java (toString): Rewritten.
	(getOption): Made abstract.
	(setOption): Made abstract.
	* java/net/natPlainSocketImpl.cc (connect): Set localport properly.
	(setOption): Implemented.
	(getOption): Implemented.
1999-05-26  Warren Levy  <warrenl@cygnus.com>
	* java/net/DatagramSocket.java (DatagramSocket): Get local host
	address when null.  Set SO_REUSEADDR for multicasts.
	(getSoTimeout): Implemented.
	(setSoTimeout): Implemented.
	* java/net/DatagramSocketImpl.java: Implement SocketOptions interface.
	* java/net/MulticastSocket.java (getInterface): Implemented.
	(setInterface): Implemented.
	(setTimeToLive): Check for invalid ttl.
	(joinGroup): Verify multicast address and security.
	(leaveGroup): Verify multicast address and security.
	(send): Implemented.
	* java/net/PlainDatagramSocketImpl.java (timeout): Added.
	(iface): Added.
	(ttl): Added.
	(setOption): Added.
	(getOption): Added.
	(mcastGrp): Added.
	(getTTL): Implemented as non-native.
	(setTTL): ditto.
	(join): ditto.
	(leave): ditto.
	* java/net/ServerSocket.java (setSoTimeout): Implemented.
	(getSoTimeout): Implemented.
	(setSocketFactory): Made synchronized.
	* java/net/Socket.java (setSoTimeout): Implemented.
	(getSoTimeout): Implemented.
	(close): Made synchronized.
	(setSocketImplFactory): Made synchronized.
	* java/net/SocketImpl.java: Implement SocketOptions interface.
	* java/net/natInetAddress.cc: Corrected module name at top of file.
	* java/net/natPlainDatagramSocketImpl.cc (McastReq): Added union.
	(bind): Added FIXME.
	(peek): Implemented.
	(setTTL): Removed.
	(getTTL): Removed.
	(join): Removed.
	(leave): Removed.
	(mcastGrp): Added.
	(setOption): Implemented for SO_REUSEADDR.
	(getOption): Implemented for SO_REUSEADDR.

From-SVN: r27184
1999-05-26 17:00:06 +00:00

251 lines
6.2 KiB
Java

// Socket.java
/* Copyright (C) 1999 Cygnus Solutions
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 Socket
{
static SocketImplFactory factory;
SocketImpl impl;
protected Socket ()
{
}
protected Socket (SocketImpl impl) throws SocketException
{
this.impl = impl;
}
public Socket (String host, int port)
throws UnknownHostException, IOException
{
this(factory == null ? new PlainSocketImpl() : factory.createSocketImpl());
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkConnect(host, port);
impl.create(true);
impl.connect(host, port);
}
public Socket (InetAddress address, int port)
throws IOException
{
this(factory == null ? new PlainSocketImpl() : factory.createSocketImpl());
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkConnect(address.getHostName(), port);
impl.create(true);
impl.connect(address, port);
}
public Socket (String host, int port,
InetAddress localAddr, int localPort) throws IOException
{
this(factory == null ? new PlainSocketImpl() : factory.createSocketImpl());
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkConnect(host, port);
impl.create(true);
impl.bind(localAddr, localPort);
impl.connect(host, port);
}
public Socket (InetAddress address, int port,
InetAddress localAddr, int localPort) throws IOException
{
this(factory == null ? new PlainSocketImpl() : factory.createSocketImpl());
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkConnect(address.getHostName(), port);
impl.create(true);
impl.bind(localAddr, localPort);
impl.connect(address, port);
}
/**
* @deprecated Use DatagramSocket instead for UDP transport.
*/
public Socket (String host, int port, boolean stream) throws IOException
{
impl = factory == null ? new PlainSocketImpl()
: factory.createSocketImpl();
impl.create(stream);
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkConnect(host, port);
impl.connect(host, port);
}
/**
* @deprecated Use DatagramSocket instead for UDP transport.
*/
public Socket (InetAddress host, int port, boolean stream) throws IOException
{
impl = factory == null ? new PlainSocketImpl()
: factory.createSocketImpl();
impl.create(stream);
SecurityManager s = System.getSecurityManager();
if (s != null)
s.checkConnect(host.getHostName(), port);
impl.connect(host, port);
}
public InetAddress getInetAddress ()
{
return impl.getInetAddress();
}
public InetAddress getLocalAddress ()
{
InetAddress localAddress;
try
{
localAddress = (InetAddress)impl.getOption(SocketOptions.SO_BINDADDR);
}
catch (SocketException x)
{
// (hopefully) shouldn't happen
System.err.println(x);
throw new java.lang.InternalError("Error in PlainSocketImpl.getOption");
}
return localAddress;
}
public int getPort ()
{
return impl.getPort();
}
public int getLocalPort ()
{
return impl.getLocalPort();
}
public InputStream getInputStream () throws IOException
{
return impl.getInputStream();
}
public OutputStream getOutputStream () throws IOException
{
return impl.getOutputStream();
}
public void setTcpNoDelay (boolean on) throws SocketException
{
impl.setOption( SocketOptions.TCP_NODELAY, new Boolean(on) );
}
public boolean getTcpNoDelay() throws SocketException
{
Boolean bool = (Boolean)impl.getOption( SocketOptions.TCP_NODELAY );
return bool.booleanValue();
}
public void setSoLinger(boolean on, int linger) throws SocketException
{
if ( on && (linger >= 0) )
{
if (linger > 65535)
linger = 65535;
impl.setOption( SocketOptions.SO_LINGER, new Integer(linger) );
}
else if ( on && (linger < 0) )
throw new IllegalArgumentException("SO_LINGER must be >= 0");
else
impl.setOption( SocketOptions.SO_LINGER, new Boolean(false) );
}
public int getSoLinger() throws SocketException
{
Object linger = impl.getOption(SocketOptions.SO_LINGER);
if (linger instanceof Integer)
return ((Integer)linger).intValue();
else
return -1;
}
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;
}
// JDK1.2
public void setSendBufferSize (int size) throws SocketException
{
if (size <= 0)
throw new IllegalArgumentException("Invalid buffer size: " + size);
impl.setOption(SocketOptions.SO_SNDBUF, new Integer(size));
}
// JDK1.2
public int getSendBufferSize () throws SocketException
{
Integer buf = (Integer)impl.getOption(SocketOptions.SO_SNDBUF);
return buf.intValue();
}
// JDK1.2
public void setReceiveBufferSize (int size) throws SocketException
{
if (size <= 0)
throw new IllegalArgumentException("Invalid buffer size: " + size);
impl.setOption(SocketOptions.SO_RCVBUF, new Integer(size));
}
// JDK1.2
public int getReceiveBufferSize () throws SocketException
{
Integer buf = (Integer)impl.getOption(SocketOptions.SO_RCVBUF);
return buf.intValue();
}
public synchronized void close () throws IOException
{
impl.close();
}
public String toString ()
{
return "Socket" + impl.toString();
}
public static synchronized void setSocketImplFactory (SocketImplFactory fac)
throws IOException
{
factory = fac;
}
}