diff options
author | Nic Ferrier <nferrier@tf1.tapsellferrier.co.uk> | 2002-01-08 21:14:58 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2002-01-08 21:14:58 +0000 |
commit | 2b521fa72ea1b694ec6fa9893ebec98979e4da68 (patch) | |
tree | 0c7277eb0833a5bcd5d85d2ce5f6352dc8c4ed5b /libjava/java/net/PlainSocketImpl.java | |
parent | 14b3e8ef09b6b6f04a5e5f76d8d4276d0cf53380 (diff) | |
download | gcc-2b521fa72ea1b694ec6fa9893ebec98979e4da68.zip gcc-2b521fa72ea1b694ec6fa9893ebec98979e4da68.tar.gz gcc-2b521fa72ea1b694ec6fa9893ebec98979e4da68.tar.bz2 |
natPlainSocketImpl.cc: Added timeout handling for sockets.
2002-01-08 Nic Ferrier <nferrier@tf1.tapsellferrier.co.uk>
* java/net/natPlainSocketImpl.cc: Added timeout handling for
sockets.
(close): New function closes the socket.
(write): New functions for output to socket.
(read): New functions for reading from socket.
* java/net/PlainSocketImpl.java: Glue for new timeout
implementation.
(write): Call the native impl.
(read): Likewise.
(getInputStream): Get a stream to read from the socket.
(getOutputStream): Get a stream to write to the socket.
From-SVN: r48662
Diffstat (limited to 'libjava/java/net/PlainSocketImpl.java')
-rw-r--r-- | libjava/java/net/PlainSocketImpl.java | 129 |
1 files changed, 115 insertions, 14 deletions
diff --git a/libjava/java/net/PlainSocketImpl.java b/libjava/java/net/PlainSocketImpl.java index 49155d9..81df487 100644 --- a/libjava/java/net/PlainSocketImpl.java +++ b/libjava/java/net/PlainSocketImpl.java @@ -1,6 +1,6 @@ // PlainSocketImpl.java - Implementation of SocketImpl. -/* Copyright (C) 1999 Free Software Foundation +/* Copyright (C) 1999 , 2002 Free Software Foundation This file is part of libgcj. @@ -11,17 +11,16 @@ details. */ package java.net; import java.io.*; -/** - * @author Per Bothner <bothner@cygnus.com> - * @date February 22, 1999. - */ /** + * The standard GCJ socket implementation. * 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. + * + * @author Per Bothner <bothner@cygnus.com> + * @author Nic Ferrier <nferrier@tapsellferrier.co.uk> */ - class PlainSocketImpl extends SocketImpl { // These fields are mirrored for use in native code to avoid cpp conflicts @@ -35,6 +34,18 @@ class PlainSocketImpl extends SocketImpl _Jv_SO_SNDBUF_ = SocketOptions.SO_SNDBUF, _Jv_SO_RCVBUF_ = SocketOptions.SO_RCVBUF; + /** + * The OS file handle representing the socket. + * This is used for reads and writes to/from the socket and + * to close it. + * + * {@link SocketImpl#fd} is created from this like so: + * <pre> + * fd = new FileDescriptor (fnum); + * </pre> + * + * When the socket is closed this is reset to -1. + */ int fnum = -1; // This value is set/read by setOption/getOption. @@ -62,37 +73,127 @@ class PlainSocketImpl extends SocketImpl 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); } + protected native int available() throws IOException; + + protected native void close () throws IOException; + + + // Stream handling. + + /** A cached copy of the in stream for reading from the socket. */ private InputStream in; + + /** A cached copy of the out stream for writing to the socket. */ private OutputStream out; + + // The native read methods. + + private native int read() throws IOException; + + private native int read(byte[] buffer, int offset, int count) + throws IOException; + + + // The native write methods. + + private native void write(int c) throws IOException; + + private native void write(byte[] buffer, int offset, int count) + throws IOException; + + + /** @return the input stream attached to the socket. + */ protected InputStream getInputStream() throws IOException { - // FIXME: TODO - Implement class SocketInputStream timeouts in read(); if (in == null) - in = new FileInputStream (fd); + in = new SocketInputStream(); return in; } + /** @return the output stream attached to the socket. + */ protected OutputStream getOutputStream() throws IOException { if (out == null) - out = new FileOutputStream (fd); + out = new SocketOutputStream(); return out; } - protected int available () throws IOException + /** + * A stream which reads from the socket implementation. + * + * @author Nic Ferrier <nferrier@tapsellferrier.co.uk> + */ + class SocketInputStream + extends InputStream { - return in.available(); + SocketInputStream() + { + } + + public final void close() throws IOException + { + PlainSocketImpl.this.close(); + } + + public final int available() throws IOException + { + return PlainSocketImpl.this.available(); + } + + public final int read() throws IOException + { + return PlainSocketImpl.this.read(); + } + + public final int read(byte[] buffer, int offset, int length) + throws IOException + { + return PlainSocketImpl.this.read(buffer, offset, length); + } + + public final int read(byte[] buffer) + throws IOException + { + return PlainSocketImpl.this.read(buffer, 0, buffer.length); + } } - protected void close () throws IOException + /** A stream which writes to the socket implementation. + * + * @author Nic Ferrier <nferrier@tapsellferrier.co.uk> + */ + class SocketOutputStream + extends OutputStream { - if (fd.valid()) - fd.close(); + public final void close() throws IOException + { + PlainSocketImpl.this.close(); + } + + public final void write(int c) throws IOException + { + PlainSocketImpl.this.write(c); + } + + public final void write(byte[] buffer, int offset, int length) + throws IOException + { + PlainSocketImpl.this.write(buffer, offset, length); + } + + public final void write(byte[] buffer) + throws IOException + { + PlainSocketImpl.this.write(buffer, 0, buffer.length); + } } } |