throbber
/*
`1.108 04/05/18
`* @(#)Socket.java
` *
` * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
`* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
`*/
`package java.net;
`import java.io.InputStream;
`import java.io.OutputStream;
`import java.io.IOException;
`import java.io.InterruptedIOException;
`import java.nio.channels.SocketChannel;
`import java.security.AccessController;
`import java.security.PrivilegedExceptionAction;
`/**
`* This class implements client sockets (also called just
`* "sockets"). A socket is an endpoint for communication
`* between two machines.
`* <p>
`* The actual work of the socket is performed by an instance of the
`* <code>SocketImpl</code> class. An application, by changing
`* the socket factory that creates the socket implementation,
`* can configure itself to create sockets appropriate to the local
`* firewall.
`*
` * @author unascribed
`* @version 1.108, 05/18/04
`* @see
` java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
` java.net.SocketImpl
`* @see
`* @see
` java.nio.channels.SocketChannel
`* @since JDK1.0
`*/
`public
`class Socket {
` /**
`* Various states of this socket.
`*/
` private boolean created = false;
` private boolean bound = false;
` private boolean connected = false;
` private boolean closed = false;
` private Object closeLock = new Object();
` private boolean shutIn = false;
` private boolean shutOut = false;
` /**
`* The implementation of this Socket.
`*/
` SocketImpl impl;
` /**
`* Are we using an older SocketImpl?
`*/
` private boolean oldImpl = false;
` /**
`* Creates an unconnected socket, with the
`* system-default type of SocketImpl.
`*
`
`Juniper Ex. 1025-p. 1
`Juniper v Finjan
`
`

`

` * @since JDK1.1
` * @revised 1.4
` */
` public Socket() {
`setImpl();
` }
` /**
` * Creates an unconnected socket, specifying the type of proxy, if any,
` * that should be used regardless of any other settings.
` * <P>
` * If there is a security manager, its <code>checkConnect</code> method
` * is called with the proxy host address and port number
` * as its arguments. This could result in a SecurityException.
` * <P>
` * Examples:
` * <UL> <LI><code>Socket s = new Socket(Proxy.NO_PROXY);</code> will create
` * a plain socket ignoring any other proxy configuration.</LI>
` * <LI><code>Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new
`InetSocketAddress("socks.mydom.com", 1080)));</code>
` * will create a socket connecting through the specified SOCKS proxy
` * server.</LI>
` * </UL>
` *
` * @param proxy a {@link java.net.Proxy Proxy} object specifying what kind
` *
` of proxying should be used.
` * @throws IllegalArgumentException if the proxy is of an invalid type
` *
`or <code>null</code>.
` * @throws SecurityException if a security manager is present and
` *
` permission to connect to the proxy is
` *
` denied.
` * @see java.net.ProxySelector
` * @see java.net.Proxy
` *
` * @since 1.5
` */
` public Socket(Proxy proxy) {
`if (proxy != null && proxy.type() == Proxy.Type.SOCKS) {
` SecurityManager security = System.getSecurityManager();
` InetSocketAddress epoint = (InetSocketAddress) proxy.address();
` if (security != null) {
`if (epoint.isUnresolved())
` security.checkConnect(epoint.getHostName(),
` epoint.getPort());
`else
` security.checkConnect(epoint.getAddress().getHostAddress(),
` epoint.getPort());
` }
` impl = new SocksSocketImpl(proxy);
` impl.setSocket(this);
`} else {
` if (proxy == Proxy.NO_PROXY) {
`if (factory == null) {
` impl = new PlainSocketImpl();
` impl.setSocket(this);
`} else
` setImpl();
` } else
`throw new IllegalArgumentException("Invalid Proxy");
`}
`
` }
`
`Juniper Ex. 1025-p. 2
`Juniper v Finjan
`
`

`

` /**
` * Creates an unconnected Socket with a user-specified
` * SocketImpl.
` * <P>
` * @param impl an instance of a <B>SocketImpl</B>
` * the subclass wishes to use on the Socket.
` *
` * @exception SocketException if there is an error in the underlying protocol,
` * such as a TCP error.
` * @since JDK1.1
` */
` protected Socket(SocketImpl impl) throws SocketException {
`this.impl = impl;
`if (impl != null) {
` checkOldImpl();
` this.impl.setSocket(this);
`}
`
` }
` /**
` * Creates a stream socket and connects it to the specified port
` * number on the named host.
` * <p>
` * If the specified host is <tt>null</tt> it is the equivalent of
` * specifying the address as <tt>{@link java.net.InetAddress#getByName
`InetAddress.getByName}(null)</tt>.
` * In other words, it is equivalent to specifying an address of the
` * loopback interface. </p>
` * <p>
` * If the application has specified a server socket factory, that
` * factory's <code>createSocketImpl</code> method is called to create
` * the actual socket implementation. Otherwise a "plain" socket is created.
` * <p>
` * If there is a security manager, its
` * <code>checkConnect</code> method is called
` * with the host address and <code>port</code>
` * as its arguments. This could result in a SecurityException.
` *
` * @param host the host name, or <code>null</code> for the loopback address.
` * @param port the port number.
` *
` * @exception UnknownHostException if the IP address of
` * the host could not be determined.
` *
` * @exception IOException if an I/O error occurs when creating the socket.
` * @exception SecurityException if a security manager exists and its
` * <code>checkConnect</code> method doesn't allow the operation.
` * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
` * @see java.net.SocketImpl
` * @see java.net.SocketImplFactory#createSocketImpl()
` * @see SecurityManager#checkConnect
` */
` public Socket(String host, int port)
`throws UnknownHostException, IOException
` {
`this(host != null ? new InetSocketAddress(host, port) :
` new InetSocketAddress(InetAddress.getByName(null), port),
` new InetSocketAddress(0), true);
`
` }
` /**
` * Creates a stream socket and connects it to the specified port
`
`Juniper Ex. 1025-p. 3
`Juniper v Finjan
`
`

`

` * number at the specified IP address.
` * <p>
` * If the application has specified a socket factory, that factory's
` * <code>createSocketImpl</code> method is called to create the
` * actual socket implementation. Otherwise a "plain" socket is created.
` * <p>
` * If there is a security manager, its
` * <code>checkConnect</code> method is called
` * with the host address and <code>port</code>
` * as its arguments. This could result in a SecurityException.
` *
` * @param address the IP address.
` * @param port the port number.
` * @exception IOException if an I/O error occurs when creating the socket.
` * @exception SecurityException if a security manager exists and its
` * <code>checkConnect</code> method doesn't allow the operation.
` * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
` * @see java.net.SocketImpl
` * @see java.net.SocketImplFactory#createSocketImpl()
` * @see SecurityManager#checkConnect
` */
` public Socket(InetAddress address, int port) throws IOException {
`this(address != null ? new InetSocketAddress(address, port) : null,
` new InetSocketAddress(0), true);
`
` }
` /**
` * Creates a socket and connects it to the specified remote host on
` * the specified remote port. The Socket will also bind() to the local
` * address and port supplied.
` * <p>
` * If the specified host is <tt>null</tt> it is the equivalent of
` * specifying the address as <tt>{@link java.net.InetAddress#getByName
`InetAddress.getByName}(null)</tt>.
` * In other words, it is equivalent to specifying an address of the
` * loopback interface. </p>
` * <p>
` * If there is a security manager, its
` * <code>checkConnect</code> method is called
` * with the host address and <code>port</code>
` * as its arguments. This could result in a SecurityException.
` *
` * @param host the name of the remote host, or <code>null</code> for the loopback
`address.
` * @param port the remote port
` * @param localAddr the local address the socket is bound to
` * @param localPort the local port the socket is bound to
` * @exception IOException if an I/O error occurs when creating the socket.
` * @exception SecurityException if a security manager exists and its
` * <code>checkConnect</code> method doesn't allow the operation.
` * @see SecurityManager#checkConnect
` * @since JDK1.1
` */
` public Socket(String host, int port, InetAddress localAddr,
` int localPort) throws IOException {
`this(host != null ? new InetSocketAddress(host, port) :
` new InetSocketAddress(InetAddress.getByName(null), port),
` new InetSocketAddress(localAddr, localPort), true);
`
` }
` /**
` * Creates a socket and connects it to the specified remote address on
`
`Juniper Ex. 1025-p. 4
`Juniper v Finjan
`
`

`

` * the specified remote port. The Socket will also bind() to the local
` * address and port supplied.
` * <p>
` * If there is a security manager, its
` * <code>checkConnect</code> method is called
` * with the host address and <code>port</code>
` * as its arguments. This could result in a SecurityException.
` *
` * @param address the remote address
` * @param port the remote port
` * @param localAddr the local address the socket is bound to
` * @param localPort the local port the socket is bound to
` * @exception IOException if an I/O error occurs when creating the socket.
` * @exception SecurityException if a security manager exists and its
` * <code>checkConnect</code> method doesn't allow the operation.
` * @see SecurityManager#checkConnect
` * @since JDK1.1
` */
` public Socket(InetAddress address, int port, InetAddress localAddr,
` int localPort) throws IOException {
`this(address != null ? new InetSocketAddress(address, port) : null,
` new InetSocketAddress(localAddr, localPort), true);
`
` }
` /**
` * Creates a stream socket and connects it to the specified port
` * number on the named host.
` * <p>
` * If the specified host is <tt>null</tt> it is the equivalent of
` * specifying the address as <tt>{@link java.net.InetAddress#getByName
`InetAddress.getByName}(null)</tt>.
` * In other words, it is equivalent to specifying an address of the
` * loopback interface. </p>
` * <p>
` * If the stream argument is <code>true</code>, this creates a
` * stream socket. If the stream argument is <code>false</code>, it
` * creates a datagram socket.
` * <p>
` * If the application has specified a server socket factory, that
` * factory's <code>createSocketImpl</code> method is called to create
` * the actual socket implementation. Otherwise a "plain" socket is created.
` * <p>
` * If there is a security manager, its
` * <code>checkConnect</code> method is called
` * with the host address and <code>port</code>
` * as its arguments. This could result in a SecurityException.
` * <p>
` * If a UDP socket is used, TCP/IP related socket options will not apply.
` *
` * @param host the host name, or <code>null</code> for the loopback address.
` * @param port the port number.
` * @param stream a <code>boolean</code> indicating whether this is
` * a stream socket or a datagram socket.
` * @exception IOException if an I/O error occurs when creating the socket.
` * @exception SecurityException if a security manager exists and its
` * <code>checkConnect</code> method doesn't allow the operation.
` * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
` * @see java.net.SocketImpl
` * @see java.net.SocketImplFactory#createSocketImpl()
` * @see SecurityManager#checkConnect
` * @deprecated Use DatagramSocket instead for UDP transport.
` */
`
`Juniper Ex. 1025-p. 5
`Juniper v Finjan
`
`

`

` @Deprecated
` public Socket(String host, int port, boolean stream) throws IOException {
`this(host != null ? new InetSocketAddress(host, port) :
` new InetSocketAddress(InetAddress.getByName(null), port),
` new InetSocketAddress(0), stream);
`
` }
` /**
` * Creates a socket and connects it to the specified port number at
` * the specified IP address.
` * <p>
` * If the stream argument is <code>true</code>, this creates a
` * stream socket. If the stream argument is <code>false</code>, it
` * creates a datagram socket.
` * <p>
` * If the application has specified a server socket factory, that
` * factory's <code>createSocketImpl</code> method is called to create
` * the actual socket implementation. Otherwise a "plain" socket is created.
` *
` * <p>If there is a security manager, its
` * <code>checkConnect</code> method is called
` * with <code>host.getHostAddress()</code> and <code>port</code>
` * as its arguments. This could result in a SecurityException.
` * <p>
` * If UDP socket is used, TCP/IP related socket options will not apply.
` *
` * @param host the IP address.
` * @param port the port number.
` * @param stream if <code>true</code>, create a stream socket;
` * otherwise, create a datagram socket.
` * @exception IOException if an I/O error occurs when creating the socket.
` * @exception SecurityException if a security manager exists and its
` * <code>checkConnect</code> method doesn't allow the operation.
` * @see java.net.Socket#setSocketImplFactory(java.net.SocketImplFactory)
` * @see java.net.SocketImpl
` * @see java.net.SocketImplFactory#createSocketImpl()
` * @see SecurityManager#checkConnect
` * @deprecated Use DatagramSocket instead for UDP transport.
` */
` @Deprecated
` public Socket(InetAddress host, int port, boolean stream) throws IOException {
`this(host != null ? new InetSocketAddress(host, port) : null,
` new InetSocketAddress(0), stream);
`
` }
` private Socket(SocketAddress address, SocketAddress localAddr,
` boolean stream) throws IOException {
`setImpl();
`// backward compatibility
`if (address == null)
` throw new NullPointerException();
`try {
` createImpl(stream);
` if (localAddr == null)
`localAddr = new InetSocketAddress(0);
` bind(localAddr);
` if (address != null)
`connect(address);
`} catch (IOException e) {
` close();
`
`Juniper Ex. 1025-p. 6
`Juniper v Finjan
`
`

`

` throw e;
`}
`
` }
` /**
` * Creates the socket implementation.
` *
` * @param stream a <code>boolean</code> value : <code>true</code> for a TCP socket,
` *
` <code>false</code> for UDP.
` * @throws IOException if creation fails
` * @since 1.4
` */
` void createImpl(boolean stream) throws SocketException {
`if (impl == null)
` setImpl();
`try {
` impl.create(stream);
` created = true;
`} catch (IOException e) {
` throw new SocketException(e.getMessage());
`}
`
` }
` private void checkOldImpl() {
`if (impl == null)
` return;
`// SocketImpl.connect() is a protected method, therefore we need to use
`// getDeclaredMethod, therefore we need permission to access the member
`try {
` AccessController.doPrivileged(new PrivilegedExceptionAction() {
` public Object run() throws NoSuchMethodException {
`Class[] cl = new Class[2];
`cl[0] = SocketAddress.class;
`cl[1] = Integer.TYPE;
`impl.getClass().getDeclaredMethod("connect", cl);
`return null;
`
` }
`});
`} catch (java.security.PrivilegedActionException e) {
` oldImpl = true;
`}
`
` }
` /**
` * Sets impl to the system-default type of SocketImpl.
` * @since 1.4
` */
` void setImpl() {
`if (factory != null) {
` impl = factory.createSocketImpl();
` checkOldImpl();
`} else {
` // No need to do a checkOldImpl() here, we know it's an up to date
` // SocketImpl!
` impl = new SocksSocketImpl();
`f (impl != null)
` impl.setSocket(this);
`
`}i
`
` }
`
` /**
`
`Juniper Ex. 1025-p. 7
`Juniper v Finjan
`
`

`

` * Get the <code>SocketImpl</code> attached to this socket, creating
` * it if necessary.
` *
` * @return
`the <code>SocketImpl</code> attached to that ServerSocket.
` * @throws SocketException if creation fails
` * @since 1.4
` */
` SocketImpl getImpl() throws SocketException {
`if (!created)
` createImpl(true);
`return impl;
`
` }
` /**
` * Connects this socket to the server.
` *
` * @param
`endpoint the <code>SocketAddress</code>
` * @throws
`IOException if an error occurs during the connection
` * @throws java.nio.channels.IllegalBlockingModeException
` * if this socket has an associated channel,
` * and the channel is in non-blocking mode
` * @throws IllegalArgumentException if endpoint is null or is a
` * SocketAddress subclass not supported by this socket
` * @since 1.4
` * @spec JSR-51
` */
` public void connect(SocketAddress endpoint) throws IOException {
`connect(endpoint, 0);
` }
` /**
` * Connects this socket to the server with a specified timeout value.
` * A timeout of zero is interpreted as an infinite timeout. The connection
` * will then block until established or an error occurs.
` *
` * @param
`endpoint the <code>SocketAddress</code>
` * @param
`timeout the timeout value to be used in milliseconds.
` * @throws
`IOException if an error occurs during the connection
` * @throws
`SocketTimeoutException if timeout expires before connecting
` * @throws java.nio.channels.IllegalBlockingModeException
` * if this socket has an associated channel,
` * and the channel is in non-blocking mode
` * @throws IllegalArgumentException if endpoint is null or is a
` * SocketAddress subclass not supported by this socket
` * @since 1.4
` * @spec JSR-51
` */
` public void connect(SocketAddress endpoint, int timeout) throws IOException {
`if (endpoint == null)
` throw new IllegalArgumentException("connect: The address can't be null");
`if (timeout < 0)
` throw new IllegalArgumentException("connect: timeout can't be negative");
`if (isClosed())
` throw new SocketException("Socket is closed");
`if (!oldImpl && isConnected())
` throw new SocketException("already connected");
`if (!(endpoint instanceof InetSocketAddress))
` throw new IllegalArgumentException("Unsupported address type");
`
`Juniper Ex. 1025-p. 8
`Juniper v Finjan
`
`

`

`InetSocketAddress epoint = (InetSocketAddress) endpoint;
`SecurityManager security = System.getSecurityManager();
`if (security != null) {
` if (epoint.isUnresolved())
`security.checkConnect(epoint.getHostName(),
` epoint.getPort());
`security.checkConnect(epoint.getAddress().getHostAddress(),
` epoint.getPort());
`
` else
`
`}i
`
`f (!created)
` createImpl(true);
`if (!oldImpl)
` impl.connect(epoint, timeout);
`else if (timeout == 0) {
` if (epoint.isUnresolved())
`impl.connect(epoint.getAddress().getHostName(),
` epoint.getPort());
` else
`impl.connect(epoint.getAddress(), epoint.getPort());
`} else
` throw new UnsupportedOperationException("SocketImpl.connect(addr, timeout)");
`connected = true;
`/*
` * If the socket was not bound before the connect, it is now because
` * the kernel will have picked an ephemeral port & a local address
` */
`bound = true;
`
` }
` /**
` * Binds the socket to a local address.
` * <P>
` * If the address is <code>null</code>, then the system will pick up
` * an ephemeral port and a valid local address to bind the socket.
` *
` * @param
`bindpoint the <code>SocketAddress</code> to bind to
` * @throws
`IOException if the bind operation fails, or if the socket
` *
` is already bound.
` * @throws IllegalArgumentException if bindpoint is a
` * SocketAddress subclass not supported by this socket
` *
` * @since
`1.4
` * @see #isBound
` */
` public void bind(SocketAddress bindpoint) throws IOException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`if (!oldImpl && isBound())
` throw new SocketException("Already bound");
`if (bindpoint != null && (!(bindpoint instanceof InetSocketAddress)))
` throw new IllegalArgumentException("Unsupported address type");
`InetSocketAddress epoint = (InetSocketAddress) bindpoint;
`if (epoint != null && epoint.isUnresolved())
` throw new SocketException("Unresolved address");
`if (bindpoint == null)
` getImpl().bind(InetAddress.anyLocalAddress(), 0);
`else
` getImpl().bind(epoint.getAddress(),
`
`Juniper Ex. 1025-p. 9
`Juniper v Finjan
`
`

`

`bound = true;
`
` epoint.getPort());
`
` }
` /**
` * set the flags after an accept() call.
` */
` final void postAccept() {
`connected = true;
`created = true;
`bound = true;
`
` }
` void setCreated() {
`created = true;
` }
` void setBound() {
`bound = true;
` }
` void setConnected() {
`connected = true;
` }
` /**
` * Returns the address to which the socket is connected.
` *
` * @return the remote IP address to which this socket is connected,
` *
`or <code>null</code> if the socket is not connected.
` */
` public InetAddress getInetAddress() {
`if (!isConnected())
` return null;
`try {
` return getImpl().getInetAddress();
`} catch (SocketException e) {
`eturn null;
`
`}r
`
` }
` /**
` * Gets the local address to which the socket is bound.
` *
` * @return the local address to which the socket is bound or
` *
` <code>InetAddress.anyLocalAddress()</code>
` *
` if the socket is not bound yet.
` * @since JDK1.1
` */
` public InetAddress getLocalAddress() {
`// This is for backward compatibility
`if (!isBound())
` return InetAddress.anyLocalAddress();
`InetAddress in = null;
`try {
` in = (InetAddress) getImpl().getOption(SocketOptions.SO_BINDADDR);
` if (in.isAnyLocalAddress()) {
`in = InetAddress.anyLocalAddress();
` }
`} catch (Exception e) {
` in = InetAddress.anyLocalAddress(); // "0.0.0.0"
`}
`
`Juniper Ex. 1025-p. 10
`Juniper v Finjan
`
`

`

`return in;
`
` }
` /**
` * Returns the remote port to which this socket is connected.
` *
` * @return the remote port number to which this socket is connected, or
` *
` 0 if the socket is not connected yet.
` */
` public int getPort() {
`if (!isConnected())
` return 0;
`try {
` return getImpl().getPort();
`} catch (SocketException e) {
` // Shouldn't happen as we're connected
`eturn -1;
`
`}r
`
` }
` /**
` * Returns the local port to which this socket is bound.
` *
` * @return the local port number to which this socket is bound or -1
` *
` if the socket is not bound yet.
` */
` public int getLocalPort() {
`if (!isBound())
` return -1;
`try {
` return getImpl().getLocalPort();
`} catch(SocketException e) {
` // shouldn't happen as we're bound
`eturn -1;
`
`}r
`
` }
` /**
` * Returns the address of the endpoint this socket is connected to, or
` * <code>null</code> if it is unconnected.
` * @return a <code>SocketAddress</code> reprensenting the remote endpoint of this
` *
` socket, or <code>null</code> if it is not connected yet.
` * @see #getInetAddress()
` * @see #getPort()
` * @see #connect(SocketAddress, int)
` * @see #connect(SocketAddress)
` * @since 1.4
` */
` public SocketAddress getRemoteSocketAddress() {
`if (!isConnected())
` return null;
`return new InetSocketAddress(getInetAddress(), getPort());
`
` }
` /**
` * Returns the address of the endpoint this socket is bound to, or
` * <code>null</code> if it is not bound yet.
` *
` * @return a <code>SocketAddress</code> representing the local endpoint of this
` *
` socket, or <code>null</code> if it is not bound yet.
` * @see #getLocalAddress()
` * @see #getLocalPort()
`
`Juniper Ex. 1025-p. 11
`Juniper v Finjan
`
`

`

` * @see #bind(SocketAddress)
` * @since 1.4
` */
` public SocketAddress getLocalSocketAddress() {
`if (!isBound())
` return null;
`return new InetSocketAddress(getLocalAddress(), getLocalPort());
`
` }
` /**
` * Returns the unique {@link java.nio.channels.SocketChannel SocketChannel}
` * object associated with this socket, if any.
` *
` * <p> A socket will have a channel if, and only if, the channel itself was
` * created via the {@link java.nio.channels.SocketChannel#open
` * SocketChannel.open} or {@link
` * java.nio.channels.ServerSocketChannel#accept ServerSocketChannel.accept}
` * methods.
` *
` * @return the socket channel associated with this socket,
` * or <tt>null</tt> if this socket was not created
` * for a channel
` *
` * @since 1.4
` * @spec JSR-51
` */
` public SocketChannel getChannel() {
`return null;
` }
` /**
` * Returns an input stream for this socket.
` *
` * <p> If this socket has an associated channel then the resulting input
` * stream delegates all of its operations to the channel. If the channel
` * is in non-blocking mode then the input stream's <tt>read</tt> operations
` * will throw an {@link java.nio.channels.IllegalBlockingModeException}.
` *
` * <p>Under abnormal conditions the underlying connection may be
` * broken by the remote host or the network software (for example
` * a connection reset in the case of TCP connections). When a
` * broken connection is detected by the network software the
` * following applies to the returned input stream :-
` *
` * <ul>
` *
` * <li><p>The network software may discard bytes that are buffered
` * by the socket. Bytes that aren't discarded by the network
` * software can be read using {@link java.io.InputStream#read read}.
` *
` * <li><p>If there are no bytes buffered on the socket, or all
` * buffered bytes have been consumed by
` * {@link java.io.InputStream#read read}, then all subsequent
` * calls to {@link java.io.InputStream#read read} will throw an
` * {@link java.io.IOException IOException}.
` *
` * <li><p>If there are no bytes buffered on the socket, and the
` * socket has not been closed using {@link #close close}, then
` * {@link java.io.InputStream#available available} will
` * return <code>0</code>.
` *
`
`Juniper Ex. 1025-p. 12
`Juniper v Finjan
`
`

`

`a
`
` * </ul>
` *
` * @return an input stream for reading bytes from this socket.
` * @exception IOException if an I/O error occurs when creating the
` * input stream, the socket is closed, the socket is
` * not connected, or the socket input has been shutdown
` * using {@link #shutdownInput()}
` *
` * @revised 1.4
` * @spec JSR-51
` */
` public InputStream getInputStream() throws IOException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`if (!isConnected())
` throw new SocketException("Socket is not connected");
`if (isInputShutdown())
` throw new SocketException("Socket input is shutdown");
`final Socket s = this;
`InputStream is = null;
`try {
` is = (InputStream)
`AccessController.doPrivileged(new PrivilegedExceptionAction() {
` public Object run() throws IOException {
`return impl.getInputStream();
` }
`});
`} catch (java.security.PrivilegedActionException e) {
` throw (IOException) e.getException();
`eturn is;
`
` }
` /**
` * Returns an output stream for this socket.
` *
` * <p> If this socket has an associated channel then the resulting output
` * stream delegates all of its operations to the channel. If the channel
` * is in non-blocking mode then the output stream's <tt>write</tt>
` * operations will throw an {@link
` * java.nio.channels.IllegalBlockingModeException}.
` *
` * @return an output stream for writing bytes to this socket.
` * @exception IOException if an I/O error occurs when creating the
` * output stream or if the socket is not connected.
` * @revised 1.4
` * @spec JSR-51
` */
` public OutputStream getOutputStream() throws IOException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`if (!isConnected())
` throw new SocketException("Socket is not connected");
`if (isOutputShutdown())
` throw new SocketException("Socket output is shutdown");
`final Socket s = this;
`OutputStream os = null;
`try {
` os = (OutputStream)
`AccessController.doPrivileged(new PrivilegedExceptionAction() {
` public Object run() throws IOException {
`return impl.getOutputStream();
`
`}r
`
`Juniper Ex. 1025-p. 13
`Juniper v Finjan
`
`

`

` }
`});
`} catch (java.security.PrivilegedActionException e) {
` throw (IOException) e.getException();
`eturn os;
`
`}r
`
` }
` /**
` * Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm).
` *
` * @param on <code>true</code> to enable TCP_NODELAY,
` * <code>false</code> to disable.
` *
` * @exception SocketException if there is an error
` * in the underlying protocol, such as a TCP error.
` *
` * @since JDK1.1
` *
` * @see #getTcpNoDelay()
` */
` public void setTcpNoDelay(boolean on) throws SocketException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`getImpl().setOption(SocketOptions.TCP_NODELAY, Boolean.valueOf(on));
`
` }
` /**
` * Tests if TCP_NODELAY is enabled.
` *
` * @return a <code>boolean</code> indicating whether or not TCP_NODELAY is enabled.
` * @exception SocketException if there is an error
` * in the underlying protocol, such as a TCP error.
` * @since JDK1.1
` * @see #setTcpNoDelay(boolean)
` */
` public boolean getTcpNoDelay() throws SocketException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`return ((Boolean) getImpl().getOption(SocketOptions.TCP_NODELAY)).booleanValue();
`
` }
` /**
` * Enable/disable SO_LINGER with the specified linger time in seconds.
` * The maximum timeout value is platform specific.
` *
` * The setting only affects socket close.
` *
` * @param on whether or not to linger on.
` * @param linger how long to linger for, if on is true.
` * @exception SocketException if there is an error
` * in the underlying protocol, such as a TCP error.
` * @exception IllegalArgumentException if the linger value is negative.
` * @since JDK1.1
` * @see #getSoLinger()
` */
` public void setSoLinger(boolean on, int linger) throws SocketException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`if (!on) {
` getImpl().setOption(SocketOptions.SO_LINGER, new Boolean(on));
`} else {
`
`Juniper Ex. 1025-p. 14
`Juniper v Finjan
`
`

`

` if (linger < 0) {
`throw new IllegalArgumentException("invalid value for SO_LINGER");
` }
` if (linger > 65535)
` linger = 65535;
` getImpl().setOption(SocketOptions.SO_LINGER, new Integer(linger));
`}
`
` }
` /**
` * Returns setting for SO_LINGER. -1 returns implies that the
` * option is disabled.
` *
` * The setting only affects socket close.
` *
` * @return the setting for SO_LINGER.
` * @exception SocketException if there is an error
` * in the underlying protocol, such as a TCP error.
` * @since JDK1.1
` * @see #setSoLinger(boolean, int)
` */
` public int getSoLinger() throws SocketException {
`if (isClosed())
` throw new SocketException("Socket is closed");
`Object o = getImpl().getOption(SocketOptions.SO_LINGER);
`if (o instanceof Integer) {
` return ((Integer) o).intValue();
`} else {
` return -1;
`}
`
` }
` /**
` * Send one byte of urgent data on the socket. The byte to be sent is the lowest eight
` * bits of the data parameter. The urgent byte is
` * sent after any preceding writes to the socket OutputStream
` * and before any future writes to the OutputStream.
` * @param data The byte of data to send
` * @exception IOException if there is an error
` * sending the data.
` * @since 1.4
` */
` public void sendUrgentData (int data) throws IOException {
` if (!getImpl().supportsUrgentData ()) {
` throw new SocketException ("Urgent data not supported");
` }
` getImpl().sendUrgentData (data);
` }
` /**
` * Enable/disable OOBINLINE (receipt of TCP urgent data)
` *
` * By default, this option is disabled and TCP urgent data received on a
` * socket is silently

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket