// PlainSocketImpl.java - Implementation of SocketImpl. /* 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. */ package java.net; import java.io.*; /** * @author Per Bothner * @date February 22, 1999. */ /** * Written using on-line Java Platform 1.2 API Specification, as well * as "The Java Class Libraries", 2nd edition (Addison-Wesley, 1998). * Status: Believed complete and correct. */ class PlainSocketImpl extends SocketImpl { // These fields are mirrored for use in native code to avoid cpp conflicts // when the #defines in system header files are the same as the public fields. static final int _Jv_TCP_NODELAY_ = SocketOptions.TCP_NODELAY, _Jv_SO_BINDADDR_ = SocketOptions.SO_BINDADDR, _Jv_SO_REUSEADDR_ = SocketOptions.SO_REUSEADDR, _Jv_IP_MULTICAST_IF_ = SocketOptions.IP_MULTICAST_IF, _Jv_SO_LINGER_ = SocketOptions.SO_LINGER, _Jv_SO_TIMEOUT_ = SocketOptions.SO_TIMEOUT, _Jv_SO_SNDBUF_ = SocketOptions.SO_SNDBUF, _Jv_SO_RCVBUF_ = SocketOptions.SO_RCVBUF; int fnum = -1; // This value is set/read by setOption/getOption. int timeout = 0; // localAddress cache InetAddress localAddress; public native void setOption(int optID, Object value) throws SocketException; public native Object getOption(int optID) throws SocketException; protected native void create (boolean stream) throws IOException; protected void connect (String host, int port) throws IOException { connect(InetAddress.getByName(host), port); } protected native void connect (InetAddress host, int port) throws IOException; protected native void bind (InetAddress host, int port) throws IOException; protected native void listen (int backlog) throws IOException; private native void accept (PlainSocketImpl s) throws IOException; protected void accept (SocketImpl s) throws IOException { accept((PlainSocketImpl) s); } private InputStream in; private OutputStream out; protected InputStream getInputStream() throws IOException { // FIXME: TODO - Implement class SocketInputStream timeouts in read(); if (in == null) in = new FileInputStream (fd); return in; } protected OutputStream getOutputStream() throws IOException { if (out == null) out = new FileOutputStream (fd); return out; } protected int available () throws IOException { return in.available(); } protected void close () throws IOException { if (fd.valid()) fd.close(); } }