changeset 4216:dc497a55daa1

7042979: Rename StandardSocketOption and StandardWatchEventKind Reviewed-by: forax, chegar
author alanb
date Mon, 09 May 2011 18:45:33 +0100
parents 5dceeea3bb99
children dec7961ff53f
files make/com/sun/nio/sctp/FILES_java.gmk make/java/nio/FILES_java.gmk src/share/classes/com/sun/nio/sctp/MessageInfo.java src/share/classes/com/sun/nio/sctp/SctpChannel.java src/share/classes/com/sun/nio/sctp/SctpMultiChannel.java src/share/classes/com/sun/nio/sctp/SctpServerChannel.java src/share/classes/com/sun/nio/sctp/SctpSocketOption.java src/share/classes/com/sun/nio/sctp/SctpStandardSocketOption.java src/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java src/share/classes/java/net/SocketOption.java src/share/classes/java/net/StandardSocketOption.java src/share/classes/java/net/StandardSocketOptions.java src/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java src/share/classes/java/nio/channels/AsynchronousSocketChannel.java src/share/classes/java/nio/channels/DatagramChannel.java src/share/classes/java/nio/channels/MulticastChannel.java src/share/classes/java/nio/channels/NetworkChannel.java src/share/classes/java/nio/channels/ServerSocketChannel.java src/share/classes/java/nio/channels/SocketChannel.java src/share/classes/java/nio/file/Path.java src/share/classes/java/nio/file/StandardWatchEventKind.java src/share/classes/java/nio/file/StandardWatchEventKinds.java src/share/classes/java/nio/file/WatchEvent.java src/share/classes/java/nio/file/WatchService.java src/share/classes/java/nio/file/Watchable.java src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java src/share/classes/sun/nio/ch/DatagramChannelImpl.java src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java src/share/classes/sun/nio/ch/ExtendedSocketOption.java src/share/classes/sun/nio/ch/Net.java src/share/classes/sun/nio/ch/ServerSocketAdaptor.java src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java src/share/classes/sun/nio/ch/SocketAdaptor.java src/share/classes/sun/nio/ch/SocketChannelImpl.java src/share/classes/sun/nio/fs/AbstractPoller.java src/share/classes/sun/nio/fs/AbstractWatchKey.java src/share/classes/sun/nio/fs/PollingWatchService.java src/share/native/sun/nio/ch/genSocketOptionRegistry.c src/share/sample/nio/chatserver/ChatServer.java src/share/sample/nio/file/WatchDir.java src/share/sample/nio/multicast/Reader.java src/share/sample/nio/multicast/Sender.java src/solaris/classes/sun/nio/ch/SctpChannelImpl.java src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java src/solaris/classes/sun/nio/ch/SctpNet.java src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java src/solaris/classes/sun/nio/fs/LinuxWatchService.java src/solaris/classes/sun/nio/fs/SolarisWatchService.java src/windows/classes/sun/nio/fs/WindowsWatchService.java test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java test/java/nio/channels/AsynchronousSocketChannel/Basic.java test/java/nio/channels/DatagramChannel/BasicMulticastTests.java test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java test/java/nio/channels/DatagramChannel/SocketOptionTests.java test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java test/java/nio/channels/SocketChannel/Shutdown.java test/java/nio/channels/SocketChannel/SocketOptionTests.java test/java/nio/file/Files/CheckPermissions.java test/java/nio/file/WatchService/Basic.java test/java/nio/file/WatchService/FileTreeModifier.java test/java/nio/file/WatchService/LotsOfEvents.java test/java/nio/file/WatchService/SensitivityModifier.java test/java/nio/file/WatchService/WithSecurityManager.java
diffstat 66 files changed, 1128 insertions(+), 1128 deletions(-) [+]
line wrap: on
line diff
--- a/make/com/sun/nio/sctp/FILES_java.gmk	Mon May 09 08:58:00 2011 -0700
+++ b/make/com/sun/nio/sctp/FILES_java.gmk	Mon May 09 18:45:33 2011 +0100
@@ -38,7 +38,7 @@
 	com/sun/nio/sctp/SctpMultiChannel.java \
 	com/sun/nio/sctp/SctpServerChannel.java \
 	com/sun/nio/sctp/SctpSocketOption.java \
-	com/sun/nio/sctp/SctpStandardSocketOption.java \
+	com/sun/nio/sctp/SctpStandardSocketOptions.java \
 	com/sun/nio/sctp/SendFailedNotification.java \
 	com/sun/nio/sctp/ShutdownNotification.java \
 	\
--- a/make/java/nio/FILES_java.gmk	Mon May 09 08:58:00 2011 -0700
+++ b/make/java/nio/FILES_java.gmk	Mon May 09 18:45:33 2011 +0100
@@ -116,7 +116,7 @@
 	java/nio/file/SimpleFileVisitor.java \
 	java/nio/file/StandardCopyOption.java \
 	java/nio/file/StandardOpenOption.java \
-	java/nio/file/StandardWatchEventKind.java \
+	java/nio/file/StandardWatchEventKinds.java \
 	java/nio/file/TempFileHelper.java \
 	java/nio/file/WatchEvent.java \
 	java/nio/file/WatchKey.java \
--- a/src/share/classes/com/sun/nio/sctp/MessageInfo.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/com/sun/nio/sctp/MessageInfo.java	Mon May 09 18:45:33 2011 +0100
@@ -179,7 +179,7 @@
      * completely received. For messages being sent {@code true} indicates that
      * the message is complete, {@code false} indicates that the message is not
      * complete. How the send channel interprets this value depends on the value
-     * of its {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
+     * of its {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
      * SCTP_EXPLICIT_COMPLETE} socket option.
      *
      * @return  {@code true} if, and only if, the message is complete
@@ -192,7 +192,7 @@
      * <P> For messages being sent {@code true} indicates that
      * the message is complete, {@code false} indicates that the message is not
      * complete. How the send channel interprets this value depends on the value
-     * of its {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
+     * of its {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
      * SCTP_EXPLICIT_COMPLETE} socket option.
      *
      * @param  complete
--- a/src/share/classes/com/sun/nio/sctp/SctpChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/com/sun/nio/sctp/SctpChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -65,55 +65,55 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_DISABLE_FRAGMENTS
+ *     <td> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
  *                                          SCTP_DISABLE_FRAGMENTS} </td>
  *     <td> Enables or disables message fragmentation </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
+ *     <td> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
  *                                          SCTP_EXPLICIT_COMPLETE} </td>
  *     <td> Enables or disables explicit message completion </td>
  *   </tr>
  *    <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
+ *     <td> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
  *                                          SCTP_FRAGMENT_INTERLEAVE} </td>
  *     <td> Controls how the presentation of messages occur for the message
  *          receiver </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS
+ *     <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
  *                                          SCTP_INIT_MAXSTREAMS} </td>
  *     <td> The maximum number of streams requested by the local endpoint during
  *          association initialization </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_NODELAY SCTP_NODELAY} </td>
+ *     <td> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </td>
  *     <td> Enables or disable a Nagle-like algorithm </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_PRIMARY_ADDR
+ *     <td> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
  *                                          SCTP_PRIMARY_ADDR} </td>
  *     <td> Requests that the local SCTP stack use the given peer address as the
  *          association primary </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_SET_PEER_PRIMARY_ADDR
+ *     <td> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
  *                                          SCTP_SET_PEER_PRIMARY_ADDR} </td>
  *     <td> Requests that the peer mark the enclosed address as the association
  *          primary </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SO_SNDBUF
+ *     <td> {@link SctpStandardSocketOptions#SO_SNDBUF
  *                                          SO_SNDBUF} </td>
  *     <td> The size of the socket send buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SO_RCVBUF
+ *     <td> {@link SctpStandardSocketOptions#SO_RCVBUF
  *                                          SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SO_LINGER
+ *     <td> {@link SctpStandardSocketOptions#SO_LINGER
  *                                          SO_LINGER} </td>
  *     <td> Linger on close if data is present (when configured in blocking mode
  *          only) </td>
@@ -449,7 +449,7 @@
      * <P> This is a convience method and is equivalent to evaluating the
      * following expression:
      * <blockquote><pre>
-     * setOption(SctpStandardSocketOption.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
+     * setOption(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS, SctpStandardSocketOption.InitMaxStreams.create(maxInStreams, maxOutStreams))
      *  .connect(remote);
      * </pre></blockquote>
      *
@@ -651,7 +651,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see SctpStandardSocketOption
+     * @see SctpStandardSocketOptions
      */
     public abstract <T> T getOption(SctpSocketOption<T> name)
         throws IOException;
@@ -680,7 +680,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see SctpStandardSocketOption
+     * @see SctpStandardSocketOptions
      */
     public abstract <T> SctpChannel setOption(SctpSocketOption<T> name, T value)
         throws IOException;
@@ -731,7 +731,7 @@
      * MessageInfo} will return {@code false}, and more invocations of this
      * method will be necessary to completely consume the messgae. Only
      * one message at a time will be partially delivered in any stream. The
-     * socket option {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
+     * socket option {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
      * SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of
      * messages occurs.
      *
@@ -804,7 +804,7 @@
      * and sufficient room becomes available, then the remaining bytes in the
      * given byte buffer are transmitted as a single message. Sending a message
      * is atomic unless explicit message completion {@link
-     * SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
+     * SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
      * socket option is enabled on this channel's socket.
      *
      * <P> The message is transferred from the byte buffer as if by a regular
--- a/src/share/classes/com/sun/nio/sctp/SctpMultiChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/com/sun/nio/sctp/SctpMultiChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -69,55 +69,55 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_DISABLE_FRAGMENTS
+ *     <td> {@link SctpStandardSocketOptions#SCTP_DISABLE_FRAGMENTS
  *                                          SCTP_DISABLE_FRAGMENTS} </td>
  *     <td> Enables or disables message fragmentation </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE
+ *     <td> {@link SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE
  *                                          SCTP_EXPLICIT_COMPLETE} </td>
  *     <td> Enables or disables explicit message completion </td>
  *   </tr>
  *    <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
+ *     <td> {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
  *                                          SCTP_FRAGMENT_INTERLEAVE} </td>
  *     <td> Controls how the presentation of messages occur for the message
  *          receiver </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS
+ *     <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
  *                                          SCTP_INIT_MAXSTREAMS} </td>
  *     <td> The maximum number of streams requested by the local endpoint during
  *          association initialization </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_NODELAY SCTP_NODELAY} </td>
+ *     <td> {@link SctpStandardSocketOptions#SCTP_NODELAY SCTP_NODELAY} </td>
  *     <td> Enables or disable a Nagle-like algorithm </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_PRIMARY_ADDR
+ *     <td> {@link SctpStandardSocketOptions#SCTP_PRIMARY_ADDR
  *                                          SCTP_PRIMARY_ADDR} </td>
  *     <td> Requests that the local SCTP stack use the given peer address as the
  *          association primary </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_SET_PEER_PRIMARY_ADDR
+ *     <td> {@link SctpStandardSocketOptions#SCTP_SET_PEER_PRIMARY_ADDR
  *                                          SCTP_SET_PEER_PRIMARY_ADDR} </td>
  *     <td> Requests that the peer mark the enclosed address as the association
  *          primary </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SO_SNDBUF
+ *     <td> {@link SctpStandardSocketOptions#SO_SNDBUF
  *                                          SO_SNDBUF} </td>
  *     <td> The size of the socket send buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SO_RCVBUF
+ *     <td> {@link SctpStandardSocketOptions#SO_RCVBUF
  *                                          SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SO_LINGER
+ *     <td> {@link SctpStandardSocketOptions#SO_LINGER
  *                                          SO_LINGER} </td>
  *     <td> Linger on close if data is present (when configured in blocking mode
  *          only) </td>
@@ -450,7 +450,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see SctpStandardSocketOption
+     * @see SctpStandardSocketOptions
      */
     public abstract <T> T getOption(SctpSocketOption<T> name,
                                     Association association)
@@ -489,7 +489,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see SctpStandardSocketOption
+     * @see SctpStandardSocketOptions
      */
     public abstract <T> SctpMultiChannel setOption(SctpSocketOption<T> name,
                                                    T value,
@@ -542,7 +542,7 @@
      * MessageInfo} will return {@code false}, and more invocations of this
      * method will be necessary to completely consume the messgae. Only
      * one message at a time will be partially delivered in any stream. The
-     * socket option {@link SctpStandardSocketOption#SCTP_FRAGMENT_INTERLEAVE
+     * socket option {@link SctpStandardSocketOptions#SCTP_FRAGMENT_INTERLEAVE
      * SCTP_FRAGMENT_INTERLEAVE} controls various aspects of what interlacing of
      * messages occurs.
      *
@@ -635,14 +635,14 @@
      * underlying output buffer, then the remaining bytes in the given byte
      * buffer are transmitted as a single message. Sending a message
      * is atomic unless explicit message completion {@link
-     * SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
+     * SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}
      * socket option is enabled on this channel's socket.
      *
      * <P> If this channel is in non-blocking mode, there is sufficient room
      * in the underlying output buffer, and an implicit association setup is
      * required, then the remaining bytes in the given byte buffer are
      * transmitted as a single message, subject to {@link
-     * SctpStandardSocketOption#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}.
+     * SctpStandardSocketOptions#SCTP_EXPLICIT_COMPLETE SCTP_EXPLICIT_COMPLETE}.
      * If for any reason the message cannot
      * be delivered an {@link AssociationChangeNotification association
      * changed} notification is put on the SCTP stack with its {@code event} parameter set
--- a/src/share/classes/com/sun/nio/sctp/SctpServerChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/com/sun/nio/sctp/SctpServerChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -53,7 +53,7 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS
+ *     <td> {@link SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS
  *                                          SCTP_INIT_MAXSTREAMS} </td>
  *     <td> The maximum number of streams requested by the local endpoint during
  *          association initialization </td>
@@ -360,7 +360,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see SctpStandardSocketOption
+     * @see SctpStandardSocketOptions
      */
     public abstract <T> T getOption(SctpSocketOption<T> name) throws IOException;
 
@@ -388,7 +388,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see SctpStandardSocketOption
+     * @see SctpStandardSocketOptions
      */
     public abstract <T> SctpServerChannel setOption(SctpSocketOption<T> name,
                                                     T value)
--- a/src/share/classes/com/sun/nio/sctp/SctpSocketOption.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/com/sun/nio/sctp/SctpSocketOption.java	Mon May 09 18:45:33 2011 +0100
@@ -33,6 +33,6 @@
  *
  * @since 1.7
  *
- * @see SctpStandardSocketOption
+ * @see SctpStandardSocketOptions
  */
 public interface SctpSocketOption<T> extends SocketOption<T> { }
--- a/src/share/classes/com/sun/nio/sctp/SctpStandardSocketOption.java	Mon May 09 08:58:00 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,419 +0,0 @@
-/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.sun.nio.sctp;
-
-import java.net.SocketAddress;
-import sun.nio.ch.SctpStdSocketOption;
-
-/**
- * SCTP channels supports the socket options defined by this class
- * (as well as those listed in the particular channel class) and may support
- * additional Implementation specific socket options.
- *
- * @since 1.7
- */
-public class SctpStandardSocketOption {
-    private SctpStandardSocketOption() {}
-    /**
-     * Enables or disables message fragmentation.
-     *
-     * <P> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. If enabled no SCTP message
-     * fragmentation will be performed. Instead if a message being sent
-     * exceeds the current PMTU size, the message will NOT be sent and
-     * an error will be indicated to the user.
-     *
-     * <P> It is implementation specific whether or not this option is
-     * supported.
-     */
-    public static final SctpSocketOption<Boolean> SCTP_DISABLE_FRAGMENTS = new
-        SctpStdSocketOption<Boolean>("SCTP_DISABLE_FRAGMENTS", Boolean.class,
-        sun.nio.ch.SctpStdSocketOption.SCTP_DISABLE_FRAGMENTS);
-
-    /**
-     * Enables or disables explicit message completion.
-     *
-     * <p> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. When this option is enabled,
-     * the {@code send} method may be invoked multiple times to a send message.
-     * The {@code isComplete} parameter of the {@link MessageInfo} must only
-     * be set to {@code true} for the final send to indicate that the message is
-     * complete. If this option is disabled then each individual {@code send}
-     * invocation is considered complete.
-     *
-     * <P> The default value of the option is {@code false} indicating that the
-     * option is disabled. It is implementation specific whether or not this
-     * option is supported.
-     */
-    public static final SctpSocketOption<Boolean> SCTP_EXPLICIT_COMPLETE = new
-        SctpStdSocketOption<Boolean>("SCTP_EXPLICIT_COMPLETE", Boolean.class,
-        sun.nio.ch.SctpStdSocketOption.SCTP_EXPLICIT_COMPLETE);
-
-    /**
-     * Fragmented interleave controls how the presentation of messages occur
-     * for the message receiver. There are three levels of fragment interleave
-     * defined. Two of the levels effect {@link SctpChannel}, while
-     * {@link SctpMultiChannel} is effected by all three levels.
-     *
-     * <P> This option takes an {@code Integer} value. It can be set to a value
-     * of {@code 0}, {@code 1} or {@code 2}.
-     *
-     * <P> Setting the three levels provides the following receiver
-     * interactions:
-     *
-     * <P> {@code level 0} - Prevents the interleaving of any messages. This
-     * means that when a partial delivery begins, no other messages will be
-     * received except the message being partially delivered. If another message
-     * arrives on a different stream (or association) that could be delivered,
-     * it will be blocked waiting for the user to read all of the partially
-     * delivered message.
-     *
-     * <P> {@code level 1} - Allows interleaving of messages that are from
-     * different associations. For {@code SctpChannel}, level 0 and
-     * level 1 have the same meaning since an {@code SctpChannel} always
-     * receives messages from the same association. Note that setting an {@code
-     * SctpMultiChannel} to this level may cause multiple partial
-     * delivers from different associations but for any given association, only
-     * one message will be delivered until all parts of a message have been
-     * delivered. This means that one large message, being read with an
-     * association identification of "X", will block other messages from
-     * association "X" from being delivered.
-     *
-     * <P> {@code level 2} - Allows complete interleaving of messages. This
-     * level requires that the sender carefully observe not only the peer
-     * {@code Association} but also must pay careful attention to the stream
-     * number. With this option enabled a partially delivered message may begin
-     * being delivered for association "X" stream "Y" and the next subsequent
-     * receive may return a message from association "X" stream "Z". Note that
-     * no other messages would be delivered for association "X" stream "Y"
-     * until all of stream "Y"'s partially delivered message was read.
-     * Note that this option effects both channel types.  Also note that
-     * for an {@code SctpMultiChannel} not only may another streams
-     * message from the same association be delivered from the next receive,
-     * some other associations message may be delivered upon the next receive.
-     *
-     * <P> It is implementation specific whether or not this option is
-     * supported.
-     */
-    public static final SctpSocketOption<Integer> SCTP_FRAGMENT_INTERLEAVE =
-            new SctpStdSocketOption<Integer>("SCTP_FRAGMENT_INTERLEAVE",
-                  Integer.class,
-                  sun.nio.ch.SctpStdSocketOption.SCTP_FRAGMENT_INTERLEAVE);
-
-    /**
-     * The maximum number of streams requested by the local endpoint during
-     * association initialization.
-     *
-     * <P> The value of this socket option is an {@link
-     * SctpStandardSocketOption.InitMaxStreams InitMaxStreams}, that represents
-     * the maximum number of inbound and outbound streams that an association
-     * on the channel is prepared to support.
-     *
-     * <P> For an {@link SctpChannel} this option may only be used to
-     * change the number of inbound/outbound streams prior to connecting.
-     *
-     * <P> For an {@link SctpMultiChannel} this option determines
-     * the maximum number of inbound/outbound streams new associations setup
-     * on the channel will be prepared to support.
-     *
-     * <P> For an {@link SctpServerChannel} this option determines the
-     * maximum number of inbound/outbound streams accepted sockets will
-     * negotiate with their connecting peer.
-     *
-     * <P> In all cases the value set by this option is used in the negotiation
-     * of new associations setup on the channel's socket and the actual
-     * maximum number of inbound/outbound streams that have been negotiated
-     * with the peer can be retrieved from the appropriate {@link
-     * Association}. The {@code Association} can be retrieved from the
-     * {@link AssociationChangeNotification.AssocChangeEvent#COMM_UP COMM_UP}
-     * {@link AssociationChangeNotification} belonging to that association.
-     *
-     * <p> This value is bounded by the actual implementation. In other
-     * words the user may be able to support more streams than the Operating
-     * System. In such a case, the Operating System limit may override the
-     * value requested by the user. The default value of 0 indicates to use
-     * the endpoints default value.
-     */
-    public static final SctpSocketOption
-        <SctpStandardSocketOption.InitMaxStreams> SCTP_INIT_MAXSTREAMS =
-        new SctpStdSocketOption<SctpStandardSocketOption.InitMaxStreams>(
-        "SCTP_INIT_MAXSTREAMS", SctpStandardSocketOption.InitMaxStreams.class);
-
-    /**
-     * Enables or disables a Nagle-like algorithm.
-     *
-     * <P> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. SCTP uses an algorithm like
-     * <em>The Nagle Algorithm</em> to coalesce short segments and
-     * improve network efficiency.
-     */
-    public static final SctpSocketOption<Boolean> SCTP_NODELAY =
-        new SctpStdSocketOption<Boolean>("SCTP_NODELAY", Boolean.class,
-        sun.nio.ch.SctpStdSocketOption.SCTP_NODELAY);
-
-    /**
-     * Requests that the local SCTP stack use the given peer address as
-     * the association primary.
-     *
-     * <P> The value of this socket option is a {@code SocketAddress}
-     * that represents the peer address that the local SCTP stack should use as
-     * the association primary. The address must be one of the association
-     * peer's addresses.
-     *
-     * <P> An {@code SctpMultiChannel} can control more than one
-     * association, the association parameter must be given when setting or
-     * retrieving this option.
-     *
-     * <P> Since {@code SctpChannel} only controls one association,
-     * the association parameter is not required and this option can be
-     * set or queried directly.
-     */
-     public static final SctpSocketOption<SocketAddress> SCTP_PRIMARY_ADDR =
-             new SctpStdSocketOption<SocketAddress>
-             ("SCTP_PRIMARY_ADDR", SocketAddress.class);
-
-     /**
-     * Requests that the peer mark the enclosed address as the association
-     * primary.
-     *
-     * <P> The value of this socket option is a {@code SocketAddress}
-     * that represents the local address that the peer should use as its
-     * primary address. The given address must be one of the association's
-     * locally bound addresses.
-     *
-     * <P> An {@code SctpMultiChannel} can control more than one
-     * association, the association parameter must be given when setting or
-     * retrieving this option.
-     *
-     * <P> Since {@code SctpChannel} only controls one association,
-     * the association parameter is not required and this option can be
-     * queried directly.
-     *
-     * <P> Note, this is a set only option and cannot be retrieved by {@code
-     * getOption}. It is implementation specific whether or not this
-     * option is supported.
-     */
-    public static final SctpSocketOption<SocketAddress> SCTP_SET_PEER_PRIMARY_ADDR =
-            new SctpStdSocketOption<SocketAddress>
-            ("SCTP_SET_PEER_PRIMARY_ADDR", SocketAddress.class);
-
-    /**
-     * The size of the socket send buffer.
-     *
-     * <p> The value of this socket option is an {@code Integer} that is the
-     * size of the socket send buffer in bytes. The socket send buffer is an
-     * output buffer used by the networking implementation. It may need to be
-     * increased for high-volume connections. The value of the socket option is
-     * a <em>hint</em> to the implementation to size the buffer and the actual
-     * size may differ. The socket option can be queried to retrieve the actual
-     * size.
-     *
-     * <p> For {@code SctpChannel}, this controls the amount of data
-     * the SCTP stack may have waiting in internal buffers to be sent. This
-     * option therefore bounds the maximum size of data that can be sent in a
-     * single send call.
-     *
-     * <P> For {@code SctpMultiChannel}, the effect is the same as for {@code
-     * SctpChannel}, except that it applies to all associations. The option
-     * applies to each association's window size separately.
-     *
-     * <p> An implementation allows this socket option to be set before the
-     * socket is bound or connected. Whether an implementation allows the
-     * socket send buffer to be changed after the socket is bound is system
-     * dependent.
-     */
-    public static final SctpSocketOption<Integer> SO_SNDBUF =
-        new SctpStdSocketOption<Integer>("SO_SNDBUF", Integer.class,
-        sun.nio.ch.SctpStdSocketOption.SO_SNDBUF);
-
-    /**
-     * The size of the socket receive buffer.
-     *
-     * <P> The value of this socket option is an {@code Integer} that is the
-     * size of the socket receive buffer in bytes. The socket receive buffer is
-     * an input buffer used by the networking implementation. It may need to be
-     * increased for high-volume connections or decreased to limit the possible
-     * backlog of incoming data. The value of the socket option is a
-     * <em>hint</em> to the implementation to size the buffer and the actual
-     * size may differ.
-     *
-     * <P> For {@code SctpChannel}, this controls the receiver window size.
-     *
-     * <P> For {@code SctpMultiChannel}, the meaning is implementation
-     * dependent. It might control the receive buffer for each association bound
-     * to the socket descriptor or it might control the receive buffer for the
-     * whole socket.
-     *
-     * <p> An implementation allows this socket option to be set before the
-     * socket is bound or connected. Whether an implementation allows the
-     * socket receive buffer to be changed after the socket is bound is system
-     * dependent.
-     */
-    public static final SctpSocketOption<Integer> SO_RCVBUF =
-        new SctpStdSocketOption<Integer>("SO_RCVBUF", Integer.class,
-        sun.nio.ch.SctpStdSocketOption.SO_RCVBUF);
-
-    /**
-     * Linger on close if data is present.
-     *
-     * <p> The value of this socket option is an {@code Integer} that controls
-     * the action taken when unsent data is queued on the socket and a method
-     * to close the socket is invoked. If the value of the socket option is zero
-     * or greater, then it represents a timeout value, in seconds, known as the
-     * <em>linger interval</em>. The linger interval is the timeout for the
-     * {@code close} method to block while the operating system attempts to
-     * transmit the unsent data or it decides that it is unable to transmit the
-     * data. If the value of the socket option is less than zero then the option
-     * is disabled. In that case the {@code close} method does not wait until
-     * unsent data is transmitted; if possible the operating system will transmit
-     * any unsent data before the connection is closed.
-     *
-     * <p> This socket option is intended for use with sockets that are configured
-     * in {@link java.nio.channels.SelectableChannel#isBlocking() blocking} mode
-     * only. The behavior of the {@code close} method when this option is
-     * enabled on a non-blocking socket is not defined.
-     *
-     * <p> The initial value of this socket option is a negative value, meaning
-     * that the option is disabled. The option may be enabled, or the linger
-     * interval changed, at any time. The maximum value of the linger interval
-     * is system dependent. Setting the linger interval to a value that is
-     * greater than its maximum value causes the linger interval to be set to
-     * its maximum value.
-     */
-    public static final SctpSocketOption<Integer> SO_LINGER =
-        new SctpStdSocketOption<Integer>("SO_LINGER", Integer.class,
-        sun.nio.ch.SctpStdSocketOption.SO_LINGER);
-
-    /**
-     * This class is used to set the maximum number of inbound/outbound streams
-     * used by the local endpoint during association initialization. An
-     * instance of this class is used to set the {@link
-     * SctpStandardSocketOption#SCTP_INIT_MAXSTREAMS SCTP_INIT_MAXSTREAMS}
-     * socket option.
-     *
-     * @since 1.7
-     */
-    public static class InitMaxStreams {
-        private int maxInStreams;
-        private int maxOutStreams;
-
-        private InitMaxStreams(int maxInStreams, int maxOutStreams) {
-           this.maxInStreams = maxInStreams;
-           this.maxOutStreams = maxOutStreams;
-        }
-
-        /**
-         * Creates an InitMaxStreams instance.
-         *
-         * @param  maxInStreams
-         *         The maximum number of inbound streams, where
-         *         {@code 0 <= maxInStreams <= 65536}
-         *
-         * @param  maxOutStreams
-         *         The maximum number of outbound streams, where
-         *         {@code 0 <= maxOutStreams <= 65536}
-         *
-         * @return  An {@code InitMaxStreams} instance
-         *
-         * @throws  IllegalArgumentException
-         *          If an argument is outside of specified bounds
-         */
-        public static InitMaxStreams create
-              (int maxInStreams, int maxOutStreams) {
-            if (maxOutStreams < 0 || maxOutStreams > 65535)
-                throw new IllegalArgumentException(
-                      "Invalid maxOutStreams value");
-            if (maxInStreams < 0 || maxInStreams > 65535)
-                throw new IllegalArgumentException(
-                      "Invalid maxInStreams value");
-
-            return new InitMaxStreams(maxInStreams, maxOutStreams);
-        }
-
-        /**
-         * Returns the maximum number of inbound streams.
-         *
-         * @return  Maximum inbound streams
-         */
-        public int maxInStreams() {
-            return maxInStreams;
-        }
-
-        /**
-         * Returns the maximum number of outbound streams.
-         *
-         * @return  Maximum outbound streams
-         */
-        public int maxOutStreams() {
-            return maxOutStreams;
-        }
-
-        /**
-         * Returns a string representation of this init max streams, including
-         * the maximum in and out bound streams.
-         *
-         * @return  A string representation of this init max streams
-         */
-        @Override
-        public String toString() {
-            StringBuilder sb = new StringBuilder();
-            sb.append(super.toString()).append(" [");
-            sb.append("maxInStreams:").append(maxInStreams);
-            sb.append("maxOutStreams:").append(maxOutStreams).append("]");
-            return sb.toString();
-        }
-
-        /**
-         * Returns true if the specified object is another {@code InitMaxStreams}
-         * instance with the same number of in and out bound streams.
-         *
-         * @param  obj
-         *         The object to be compared with this init max streams
-         *
-         * @return  true if the specified object is another
-         *          {@code InitMaxStreams} instance with the same number of in
-         *          and out bound streams
-         */
-        @Override
-        public boolean equals(Object obj) {
-            if (obj != null && obj instanceof InitMaxStreams) {
-                InitMaxStreams that = (InitMaxStreams) obj;
-                if (this.maxInStreams == that.maxInStreams &&
-                    this.maxOutStreams == that.maxOutStreams)
-                    return true;
-            }
-            return false;
-        }
-
-        /**
-         * Returns a hash code value for this init max streams.
-         */
-        @Override
-        public int hashCode() {
-            int hash = 7 ^ maxInStreams ^ maxOutStreams;
-            return hash;
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/nio/sctp/SctpStandardSocketOptions.java	Mon May 09 18:45:33 2011 +0100
@@ -0,0 +1,419 @@
+/*
+ * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.sun.nio.sctp;
+
+import java.net.SocketAddress;
+import sun.nio.ch.SctpStdSocketOption;
+
+/**
+ * SCTP channels supports the socket options defined by this class
+ * (as well as those listed in the particular channel class) and may support
+ * additional Implementation specific socket options.
+ *
+ * @since 1.7
+ */
+public class SctpStandardSocketOptions {
+    private SctpStandardSocketOptions() {}
+    /**
+     * Enables or disables message fragmentation.
+     *
+     * <P> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. If enabled no SCTP message
+     * fragmentation will be performed. Instead if a message being sent
+     * exceeds the current PMTU size, the message will NOT be sent and
+     * an error will be indicated to the user.
+     *
+     * <P> It is implementation specific whether or not this option is
+     * supported.
+     */
+    public static final SctpSocketOption<Boolean> SCTP_DISABLE_FRAGMENTS = new
+        SctpStdSocketOption<Boolean>("SCTP_DISABLE_FRAGMENTS", Boolean.class,
+        sun.nio.ch.SctpStdSocketOption.SCTP_DISABLE_FRAGMENTS);
+
+    /**
+     * Enables or disables explicit message completion.
+     *
+     * <p> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. When this option is enabled,
+     * the {@code send} method may be invoked multiple times to a send message.
+     * The {@code isComplete} parameter of the {@link MessageInfo} must only
+     * be set to {@code true} for the final send to indicate that the message is
+     * complete. If this option is disabled then each individual {@code send}
+     * invocation is considered complete.
+     *
+     * <P> The default value of the option is {@code false} indicating that the
+     * option is disabled. It is implementation specific whether or not this
+     * option is supported.
+     */
+    public static final SctpSocketOption<Boolean> SCTP_EXPLICIT_COMPLETE = new
+        SctpStdSocketOption<Boolean>("SCTP_EXPLICIT_COMPLETE", Boolean.class,
+        sun.nio.ch.SctpStdSocketOption.SCTP_EXPLICIT_COMPLETE);
+
+    /**
+     * Fragmented interleave controls how the presentation of messages occur
+     * for the message receiver. There are three levels of fragment interleave
+     * defined. Two of the levels effect {@link SctpChannel}, while
+     * {@link SctpMultiChannel} is effected by all three levels.
+     *
+     * <P> This option takes an {@code Integer} value. It can be set to a value
+     * of {@code 0}, {@code 1} or {@code 2}.
+     *
+     * <P> Setting the three levels provides the following receiver
+     * interactions:
+     *
+     * <P> {@code level 0} - Prevents the interleaving of any messages. This
+     * means that when a partial delivery begins, no other messages will be
+     * received except the message being partially delivered. If another message
+     * arrives on a different stream (or association) that could be delivered,
+     * it will be blocked waiting for the user to read all of the partially
+     * delivered message.
+     *
+     * <P> {@code level 1} - Allows interleaving of messages that are from
+     * different associations. For {@code SctpChannel}, level 0 and
+     * level 1 have the same meaning since an {@code SctpChannel} always
+     * receives messages from the same association. Note that setting an {@code
+     * SctpMultiChannel} to this level may cause multiple partial
+     * delivers from different associations but for any given association, only
+     * one message will be delivered until all parts of a message have been
+     * delivered. This means that one large message, being read with an
+     * association identification of "X", will block other messages from
+     * association "X" from being delivered.
+     *
+     * <P> {@code level 2} - Allows complete interleaving of messages. This
+     * level requires that the sender carefully observe not only the peer
+     * {@code Association} but also must pay careful attention to the stream
+     * number. With this option enabled a partially delivered message may begin
+     * being delivered for association "X" stream "Y" and the next subsequent
+     * receive may return a message from association "X" stream "Z". Note that
+     * no other messages would be delivered for association "X" stream "Y"
+     * until all of stream "Y"'s partially delivered message was read.
+     * Note that this option effects both channel types.  Also note that
+     * for an {@code SctpMultiChannel} not only may another streams
+     * message from the same association be delivered from the next receive,
+     * some other associations message may be delivered upon the next receive.
+     *
+     * <P> It is implementation specific whether or not this option is
+     * supported.
+     */
+    public static final SctpSocketOption<Integer> SCTP_FRAGMENT_INTERLEAVE =
+            new SctpStdSocketOption<Integer>("SCTP_FRAGMENT_INTERLEAVE",
+                  Integer.class,
+                  sun.nio.ch.SctpStdSocketOption.SCTP_FRAGMENT_INTERLEAVE);
+
+    /**
+     * The maximum number of streams requested by the local endpoint during
+     * association initialization.
+     *
+     * <P> The value of this socket option is an {@link
+     * SctpStandardSocketOptions.InitMaxStreams InitMaxStreams}, that represents
+     * the maximum number of inbound and outbound streams that an association
+     * on the channel is prepared to support.
+     *
+     * <P> For an {@link SctpChannel} this option may only be used to
+     * change the number of inbound/outbound streams prior to connecting.
+     *
+     * <P> For an {@link SctpMultiChannel} this option determines
+     * the maximum number of inbound/outbound streams new associations setup
+     * on the channel will be prepared to support.
+     *
+     * <P> For an {@link SctpServerChannel} this option determines the
+     * maximum number of inbound/outbound streams accepted sockets will
+     * negotiate with their connecting peer.
+     *
+     * <P> In all cases the value set by this option is used in the negotiation
+     * of new associations setup on the channel's socket and the actual
+     * maximum number of inbound/outbound streams that have been negotiated
+     * with the peer can be retrieved from the appropriate {@link
+     * Association}. The {@code Association} can be retrieved from the
+     * {@link AssociationChangeNotification.AssocChangeEvent#COMM_UP COMM_UP}
+     * {@link AssociationChangeNotification} belonging to that association.
+     *
+     * <p> This value is bounded by the actual implementation. In other
+     * words the user may be able to support more streams than the Operating
+     * System. In such a case, the Operating System limit may override the
+     * value requested by the user. The default value of 0 indicates to use
+     * the endpoints default value.
+     */
+    public static final SctpSocketOption
+        <SctpStandardSocketOptions.InitMaxStreams> SCTP_INIT_MAXSTREAMS =
+        new SctpStdSocketOption<SctpStandardSocketOptions.InitMaxStreams>(
+        "SCTP_INIT_MAXSTREAMS", SctpStandardSocketOptions.InitMaxStreams.class);
+
+    /**
+     * Enables or disables a Nagle-like algorithm.
+     *
+     * <P> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. SCTP uses an algorithm like
+     * <em>The Nagle Algorithm</em> to coalesce short segments and
+     * improve network efficiency.
+     */
+    public static final SctpSocketOption<Boolean> SCTP_NODELAY =
+        new SctpStdSocketOption<Boolean>("SCTP_NODELAY", Boolean.class,
+        sun.nio.ch.SctpStdSocketOption.SCTP_NODELAY);
+
+    /**
+     * Requests that the local SCTP stack use the given peer address as
+     * the association primary.
+     *
+     * <P> The value of this socket option is a {@code SocketAddress}
+     * that represents the peer address that the local SCTP stack should use as
+     * the association primary. The address must be one of the association
+     * peer's addresses.
+     *
+     * <P> An {@code SctpMultiChannel} can control more than one
+     * association, the association parameter must be given when setting or
+     * retrieving this option.
+     *
+     * <P> Since {@code SctpChannel} only controls one association,
+     * the association parameter is not required and this option can be
+     * set or queried directly.
+     */
+     public static final SctpSocketOption<SocketAddress> SCTP_PRIMARY_ADDR =
+             new SctpStdSocketOption<SocketAddress>
+             ("SCTP_PRIMARY_ADDR", SocketAddress.class);
+
+     /**
+     * Requests that the peer mark the enclosed address as the association
+     * primary.
+     *
+     * <P> The value of this socket option is a {@code SocketAddress}
+     * that represents the local address that the peer should use as its
+     * primary address. The given address must be one of the association's
+     * locally bound addresses.
+     *
+     * <P> An {@code SctpMultiChannel} can control more than one
+     * association, the association parameter must be given when setting or
+     * retrieving this option.
+     *
+     * <P> Since {@code SctpChannel} only controls one association,
+     * the association parameter is not required and this option can be
+     * queried directly.
+     *
+     * <P> Note, this is a set only option and cannot be retrieved by {@code
+     * getOption}. It is implementation specific whether or not this
+     * option is supported.
+     */
+    public static final SctpSocketOption<SocketAddress> SCTP_SET_PEER_PRIMARY_ADDR =
+            new SctpStdSocketOption<SocketAddress>
+            ("SCTP_SET_PEER_PRIMARY_ADDR", SocketAddress.class);
+
+    /**
+     * The size of the socket send buffer.
+     *
+     * <p> The value of this socket option is an {@code Integer} that is the
+     * size of the socket send buffer in bytes. The socket send buffer is an
+     * output buffer used by the networking implementation. It may need to be
+     * increased for high-volume connections. The value of the socket option is
+     * a <em>hint</em> to the implementation to size the buffer and the actual
+     * size may differ. The socket option can be queried to retrieve the actual
+     * size.
+     *
+     * <p> For {@code SctpChannel}, this controls the amount of data
+     * the SCTP stack may have waiting in internal buffers to be sent. This
+     * option therefore bounds the maximum size of data that can be sent in a
+     * single send call.
+     *
+     * <P> For {@code SctpMultiChannel}, the effect is the same as for {@code
+     * SctpChannel}, except that it applies to all associations. The option
+     * applies to each association's window size separately.
+     *
+     * <p> An implementation allows this socket option to be set before the
+     * socket is bound or connected. Whether an implementation allows the
+     * socket send buffer to be changed after the socket is bound is system
+     * dependent.
+     */
+    public static final SctpSocketOption<Integer> SO_SNDBUF =
+        new SctpStdSocketOption<Integer>("SO_SNDBUF", Integer.class,
+        sun.nio.ch.SctpStdSocketOption.SO_SNDBUF);
+
+    /**
+     * The size of the socket receive buffer.
+     *
+     * <P> The value of this socket option is an {@code Integer} that is the
+     * size of the socket receive buffer in bytes. The socket receive buffer is
+     * an input buffer used by the networking implementation. It may need to be
+     * increased for high-volume connections or decreased to limit the possible
+     * backlog of incoming data. The value of the socket option is a
+     * <em>hint</em> to the implementation to size the buffer and the actual
+     * size may differ.
+     *
+     * <P> For {@code SctpChannel}, this controls the receiver window size.
+     *
+     * <P> For {@code SctpMultiChannel}, the meaning is implementation
+     * dependent. It might control the receive buffer for each association bound
+     * to the socket descriptor or it might control the receive buffer for the
+     * whole socket.
+     *
+     * <p> An implementation allows this socket option to be set before the
+     * socket is bound or connected. Whether an implementation allows the
+     * socket receive buffer to be changed after the socket is bound is system
+     * dependent.
+     */
+    public static final SctpSocketOption<Integer> SO_RCVBUF =
+        new SctpStdSocketOption<Integer>("SO_RCVBUF", Integer.class,
+        sun.nio.ch.SctpStdSocketOption.SO_RCVBUF);
+
+    /**
+     * Linger on close if data is present.
+     *
+     * <p> The value of this socket option is an {@code Integer} that controls
+     * the action taken when unsent data is queued on the socket and a method
+     * to close the socket is invoked. If the value of the socket option is zero
+     * or greater, then it represents a timeout value, in seconds, known as the
+     * <em>linger interval</em>. The linger interval is the timeout for the
+     * {@code close} method to block while the operating system attempts to
+     * transmit the unsent data or it decides that it is unable to transmit the
+     * data. If the value of the socket option is less than zero then the option
+     * is disabled. In that case the {@code close} method does not wait until
+     * unsent data is transmitted; if possible the operating system will transmit
+     * any unsent data before the connection is closed.
+     *
+     * <p> This socket option is intended for use with sockets that are configured
+     * in {@link java.nio.channels.SelectableChannel#isBlocking() blocking} mode
+     * only. The behavior of the {@code close} method when this option is
+     * enabled on a non-blocking socket is not defined.
+     *
+     * <p> The initial value of this socket option is a negative value, meaning
+     * that the option is disabled. The option may be enabled, or the linger
+     * interval changed, at any time. The maximum value of the linger interval
+     * is system dependent. Setting the linger interval to a value that is
+     * greater than its maximum value causes the linger interval to be set to
+     * its maximum value.
+     */
+    public static final SctpSocketOption<Integer> SO_LINGER =
+        new SctpStdSocketOption<Integer>("SO_LINGER", Integer.class,
+        sun.nio.ch.SctpStdSocketOption.SO_LINGER);
+
+    /**
+     * This class is used to set the maximum number of inbound/outbound streams
+     * used by the local endpoint during association initialization. An
+     * instance of this class is used to set the {@link
+     * SctpStandardSocketOptions#SCTP_INIT_MAXSTREAMS SCTP_INIT_MAXSTREAMS}
+     * socket option.
+     *
+     * @since 1.7
+     */
+    public static class InitMaxStreams {
+        private int maxInStreams;
+        private int maxOutStreams;
+
+        private InitMaxStreams(int maxInStreams, int maxOutStreams) {
+           this.maxInStreams = maxInStreams;
+           this.maxOutStreams = maxOutStreams;
+        }
+
+        /**
+         * Creates an InitMaxStreams instance.
+         *
+         * @param  maxInStreams
+         *         The maximum number of inbound streams, where
+         *         {@code 0 <= maxInStreams <= 65536}
+         *
+         * @param  maxOutStreams
+         *         The maximum number of outbound streams, where
+         *         {@code 0 <= maxOutStreams <= 65536}
+         *
+         * @return  An {@code InitMaxStreams} instance
+         *
+         * @throws  IllegalArgumentException
+         *          If an argument is outside of specified bounds
+         */
+        public static InitMaxStreams create
+              (int maxInStreams, int maxOutStreams) {
+            if (maxOutStreams < 0 || maxOutStreams > 65535)
+                throw new IllegalArgumentException(
+                      "Invalid maxOutStreams value");
+            if (maxInStreams < 0 || maxInStreams > 65535)
+                throw new IllegalArgumentException(
+                      "Invalid maxInStreams value");
+
+            return new InitMaxStreams(maxInStreams, maxOutStreams);
+        }
+
+        /**
+         * Returns the maximum number of inbound streams.
+         *
+         * @return  Maximum inbound streams
+         */
+        public int maxInStreams() {
+            return maxInStreams;
+        }
+
+        /**
+         * Returns the maximum number of outbound streams.
+         *
+         * @return  Maximum outbound streams
+         */
+        public int maxOutStreams() {
+            return maxOutStreams;
+        }
+
+        /**
+         * Returns a string representation of this init max streams, including
+         * the maximum in and out bound streams.
+         *
+         * @return  A string representation of this init max streams
+         */
+        @Override
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            sb.append(super.toString()).append(" [");
+            sb.append("maxInStreams:").append(maxInStreams);
+            sb.append("maxOutStreams:").append(maxOutStreams).append("]");
+            return sb.toString();
+        }
+
+        /**
+         * Returns true if the specified object is another {@code InitMaxStreams}
+         * instance with the same number of in and out bound streams.
+         *
+         * @param  obj
+         *         The object to be compared with this init max streams
+         *
+         * @return  true if the specified object is another
+         *          {@code InitMaxStreams} instance with the same number of in
+         *          and out bound streams
+         */
+        @Override
+        public boolean equals(Object obj) {
+            if (obj != null && obj instanceof InitMaxStreams) {
+                InitMaxStreams that = (InitMaxStreams) obj;
+                if (this.maxInStreams == that.maxInStreams &&
+                    this.maxOutStreams == that.maxOutStreams)
+                    return true;
+            }
+            return false;
+        }
+
+        /**
+         * Returns a hash code value for this init max streams.
+         */
+        @Override
+        public int hashCode() {
+            int hash = 7 ^ maxInStreams ^ maxOutStreams;
+            return hash;
+        }
+    }
+}
--- a/src/share/classes/java/net/SocketOption.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/net/SocketOption.java	Mon May 09 18:45:33 2011 +0100
@@ -38,7 +38,7 @@
  *
  * @since 1.7
  *
- * @see StandardSocketOption
+ * @see StandardSocketOptions
  */
 
 public interface SocketOption<T> {
--- a/src/share/classes/java/net/StandardSocketOption.java	Mon May 09 08:58:00 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,367 +0,0 @@
-/*
- * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package java.net;
-
-/**
- * Defines the <em>standard</em> socket options.
- *
- * <p> The {@link SocketOption#name name} of each socket option defined by this
- * class is its field name.
- *
- * <p> In this release, the socket options defined here are used by {@link
- * java.nio.channels.NetworkChannel network} channels in the {@link
- * java.nio.channels channels} package.
- *
- * @since 1.7
- */
-
-public final class StandardSocketOption {
-    private StandardSocketOption() { }
-
-    // -- SOL_SOCKET --
-
-    /**
-     * Allow transmission of broadcast datagrams.
-     *
-     * <p> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. The option is specific to
-     * datagram-oriented sockets sending to {@link java.net.Inet4Address IPv4}
-     * broadcast addresses. When the socket option is enabled then the socket
-     * can be used to send <em>broadcast datagrams</em>.
-     *
-     * <p> The initial value of this socket option is {@code FALSE}. The socket
-     * option may be enabled or disabled at any time. Some operating systems may
-     * require that the Java virtual machine be started with implementation
-     * specific privileges to enable this option or send broadcast datagrams.
-     *
-     * @see <a href="http://www.ietf.org/rfc/rfc919.txt">RFC&nbsp;929:
-     * Broadcasting Internet Datagrams</a>
-     * @see DatagramSocket#setBroadcast
-     */
-    public static final SocketOption<Boolean> SO_BROADCAST =
-        new StdSocketOption<Boolean>("SO_BROADCAST", Boolean.class);
-
-    /**
-     * Keep connection alive.
-     *
-     * <p> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. When the {@code SO_KEEPALIVE}
-     * option is enabled the operating system may use a <em>keep-alive</em>
-     * mechanism to periodically probe the other end of a connection when the
-     * connection is otherwise idle. The exact semantics of the keep alive
-     * mechanism is system dependent and therefore unspecified.
-     *
-     * <p> The initial value of this socket option is {@code FALSE}. The socket
-     * option may be enabled or disabled at any time.
-     *
-     * @see <a href="http://www.ietf.org/rfc/rfc1122.txt">RFC&nbsp;1122
-     * Requirements for Internet Hosts -- Communication Layers</a>
-     * @see Socket#setKeepAlive
-     */
-    public static final SocketOption<Boolean> SO_KEEPALIVE =
-        new StdSocketOption<Boolean>("SO_KEEPALIVE", Boolean.class);
-
-    /**
-     * The size of the socket send buffer.
-     *
-     * <p> The value of this socket option is an {@code Integer} that is the
-     * size of the socket send buffer in bytes. The socket send buffer is an
-     * output buffer used by the networking implementation. It may need to be
-     * increased for high-volume connections. The value of the socket option is
-     * a <em>hint</em> to the implementation to size the buffer and the actual
-     * size may differ. The socket option can be queried to retrieve the actual
-     * size.
-     *
-     * <p> For datagram-oriented sockets, the size of the send buffer may limit
-     * the size of the datagrams that may be sent by the socket. Whether
-     * datagrams larger than the buffer size are sent or discarded is system
-     * dependent.
-     *
-     * <p> The initial/default size of the socket send buffer and the range of
-     * allowable values is system dependent although a negative size is not
-     * allowed. An attempt to set the socket send buffer to larger than its
-     * maximum size causes it to be set to its maximum size.
-     *
-     * <p> An implementation allows this socket option to be set before the
-     * socket is bound or connected. Whether an implementation allows the
-     * socket send buffer to be changed after the socket is bound is system
-     * dependent.
-     *
-     * @see Socket#setSendBufferSize
-     */
-    public static final SocketOption<Integer> SO_SNDBUF =
-        new StdSocketOption<Integer>("SO_SNDBUF", Integer.class);
-
-
-    /**
-     * The size of the socket receive buffer.
-     *
-     * <p> The value of this socket option is an {@code Integer} that is the
-     * size of the socket receive buffer in bytes. The socket receive buffer is
-     * an input buffer used by the networking implementation. It may need to be
-     * increased for high-volume connections or decreased to limit the possible
-     * backlog of incoming data. The value of the socket option is a
-     * <em>hint</em> to the implementation to size the buffer and the actual
-     * size may differ.
-     *
-     * <p> For datagram-oriented sockets, the size of the receive buffer may
-     * limit the size of the datagrams that can be received. Whether datagrams
-     * larger than the buffer size can be received is system dependent.
-     * Increasing the socket receive buffer may be important for cases where
-     * datagrams arrive in bursts faster than they can be processed.
-     *
-     * <p> In the case of stream-oriented sockets and the TCP/IP protocol, the
-     * size of the socket receive buffer may be used when advertising the size
-     * of the TCP receive window to the remote peer.
-     *
-     * <p> The initial/default size of the socket receive buffer and the range
-     * of allowable values is system dependent although a negative size is not
-     * allowed. An attempt to set the socket receive buffer to larger than its
-     * maximum size causes it to be set to its maximum size.
-     *
-     * <p> An implementation allows this socket option to be set before the
-     * socket is bound or connected. Whether an implementation allows the
-     * socket receive buffer to be changed after the socket is bound is system
-     * dependent.
-     *
-     * @see <a href="http://www.ietf.org/rfc/rfc1323.txt">RFC&nbsp;1323: TCP
-     * Extensions for High Performance</a>
-     * @see Socket#setReceiveBufferSize
-     * @see ServerSocket#setReceiveBufferSize
-     */
-    public static final SocketOption<Integer> SO_RCVBUF =
-        new StdSocketOption<Integer>("SO_RCVBUF", Integer.class);
-
-    /**
-     * Re-use address.
-     *
-     * <p> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. The exact semantics of this
-     * socket option are socket type and system dependent.
-     *
-     * <p> In the case of stream-oriented sockets, this socket option will
-     * usually determine whether the socket can be bound to a socket address
-     * when a previous connection involving that socket address is in the
-     * <em>TIME_WAIT</em> state. On implementations where the semantics differ,
-     * and the socket option is not required to be enabled in order to bind the
-     * socket when a previous connection is in this state, then the
-     * implementation may choose to ignore this option.
-     *
-     * <p> For datagram-oriented sockets the socket option is used to allow
-     * multiple programs bind to the same address. This option should be enabled
-     * when the socket is to be used for Internet Protocol (IP) multicasting.
-     *
-     * <p> An implementation allows this socket option to be set before the
-     * socket is bound or connected. Changing the value of this socket option
-     * after the socket is bound has no effect. The default value of this
-     * socket option is system dependent.
-     *
-     * @see <a href="http://www.ietf.org/rfc/rfc793.txt">RFC&nbsp;793: Transmission
-     * Control Protocol</a>
-     * @see ServerSocket#setReuseAddress
-     */
-    public static final SocketOption<Boolean> SO_REUSEADDR =
-        new StdSocketOption<Boolean>("SO_REUSEADDR", Boolean.class);
-
-    /**
-     * Linger on close if data is present.
-     *
-     * <p> The value of this socket option is an {@code Integer} that controls
-     * the action taken when unsent data is queued on the socket and a method
-     * to close the socket is invoked. If the value of the socket option is zero
-     * or greater, then it represents a timeout value, in seconds, known as the
-     * <em>linger interval</em>. The linger interval is the timeout for the
-     * {@code close} method to block while the operating system attempts to
-     * transmit the unsent data or it decides that it is unable to transmit the
-     * data. If the value of the socket option is less than zero then the option
-     * is disabled. In that case the {@code close} method does not wait until
-     * unsent data is transmitted; if possible the operating system will transmit
-     * any unsent data before the connection is closed.
-     *
-     * <p> This socket option is intended for use with sockets that are configured
-     * in {@link java.nio.channels.SelectableChannel#isBlocking() blocking} mode
-     * only. The behavior of the {@code close} method when this option is
-     * enabled on a non-blocking socket is not defined.
-     *
-     * <p> The initial value of this socket option is a negative value, meaning
-     * that the option is disabled. The option may be enabled, or the linger
-     * interval changed, at any time. The maximum value of the linger interval
-     * is system dependent. Setting the linger interval to a value that is
-     * greater than its maximum value causes the linger interval to be set to
-     * its maximum value.
-     *
-     * @see Socket#setSoLinger
-     */
-    public static final SocketOption<Integer> SO_LINGER =
-        new StdSocketOption<Integer>("SO_LINGER", Integer.class);
-
-
-    // -- IPPROTO_IP --
-
-    /**
-     * The Type of Service (ToS) octet in the Internet Protocol (IP) header.
-     *
-     * <p> The value of this socket option is an {@code Integer} representing
-     * the value of the ToS octet in IP packets sent by sockets to an {@link
-     * StandardProtocolFamily#INET IPv4} socket. The interpretation of the ToS
-     * octet is network specific and is not defined by this class. Further
-     * information on the ToS octet can be found in <a
-     * href="http://www.ietf.org/rfc/rfc1349.txt">RFC&nbsp;1349</a> and <a
-     * href="http://www.ietf.org/rfc/rfc2474.txt">RFC&nbsp;2474</a>. The value
-     * of the socket option is a <em>hint</em>. An implementation may ignore the
-     * value, or ignore specific values.
-     *
-     * <p> The initial/default value of the TOS field in the ToS octet is
-     * implementation specific but will typically be {@code 0}. For
-     * datagram-oriented sockets the option may be configured at any time after
-     * the socket has been bound. The new value of the octet is used when sending
-     * subsequent datagrams. It is system dependent whether this option can be
-     * queried or changed prior to binding the socket.
-     *
-     * <p> The behavior of this socket option on a stream-oriented socket, or an
-     * {@link StandardProtocolFamily#INET6 IPv6} socket, is not defined in this
-     * release.
-     *
-     * @see DatagramSocket#setTrafficClass
-     */
-    public static final SocketOption<Integer> IP_TOS =
-        new StdSocketOption<Integer>("IP_TOS", Integer.class);
-
-    /**
-     * The network interface for Internet Protocol (IP) multicast datagrams.
-     *
-     * <p> The value of this socket option is a {@link NetworkInterface} that
-     * represents the outgoing interface for multicast datagrams sent by the
-     * datagram-oriented socket. For {@link StandardProtocolFamily#INET6 IPv6}
-     * sockets then it is system dependent whether setting this option also
-     * sets the outgoing interface for multlicast datagrams sent to IPv4
-     * addresses.
-     *
-     * <p> The initial/default value of this socket option may be {@code null}
-     * to indicate that outgoing interface will be selected by the operating
-     * system, typically based on the network routing tables. An implementation
-     * allows this socket option to be set after the socket is bound. Whether
-     * the socket option can be queried or changed prior to binding the socket
-     * is system dependent.
-     *
-     * @see java.nio.channels.MulticastChannel
-     * @see MulticastSocket#setInterface
-     */
-    public static final SocketOption<NetworkInterface> IP_MULTICAST_IF =
-        new StdSocketOption<NetworkInterface>("IP_MULTICAST_IF", NetworkInterface.class);
-
-    /**
-     * The <em>time-to-live</em> for Internet Protocol (IP) multicast datagrams.
-     *
-     * <p> The value of this socket option is an {@code Integer} in the range
-     * <tt>0&nbsp;<=&nbsp;value&nbsp;<=&nbsp;255</tt>. It is used to control
-     * the scope of multicast datagrams sent by the datagram-oriented socket.
-     * In the case of an {@link StandardProtocolFamily#INET IPv4} socket
-     * the option is the time-to-live (TTL) on multicast datagrams sent by the
-     * socket. Datagrams with a TTL of zero are not transmitted on the network
-     * but may be delivered locally. In the case of an {@link
-     * StandardProtocolFamily#INET6 IPv6} socket the option is the
-     * <em>hop limit</em> which is number of <em>hops</em> that the datagram can
-     * pass through before expiring on the network. For IPv6 sockets it is
-     * system dependent whether the option also sets the <em>time-to-live</em>
-     * on multicast datagrams sent to IPv4 addresses.
-     *
-     * <p> The initial/default value of the time-to-live setting is typically
-     * {@code 1}. An implementation allows this socket option to be set after
-     * the socket is bound. Whether the socket option can be queried or changed
-     * prior to binding the socket is system dependent.
-     *
-     * @see java.nio.channels.MulticastChannel
-     * @see MulticastSocket#setTimeToLive
-     */
-    public static final SocketOption<Integer> IP_MULTICAST_TTL =
-        new StdSocketOption<Integer>("IP_MULTICAST_TTL", Integer.class);
-
-    /**
-     * Loopback for Internet Protocol (IP) multicast datagrams.
-     *
-     * <p> The value of this socket option is a {@code Boolean} that controls
-     * the <em>loopback</em> of multicast datagrams. The value of the socket
-     * option represents if the option is enabled or disabled.
-     *
-     * <p> The exact semantics of this socket options are system dependent.
-     * In particular, it is system dependent whether the loopback applies to
-     * multicast datagrams sent from the socket or received by the socket.
-     * For {@link StandardProtocolFamily#INET6 IPv6} sockets then it is
-     * system dependent whether the option also applies to multicast datagrams
-     * sent to IPv4 addresses.
-     *
-     * <p> The initial/default value of this socket option is {@code TRUE}. An
-     * implementation allows this socket option to be set after the socket is
-     * bound. Whether the socket option can be queried or changed prior to
-     * binding the socket is system dependent.
-     *
-     * @see java.nio.channels.MulticastChannel
-     *  @see MulticastSocket#setLoopbackMode
-     */
-    public static final SocketOption<Boolean> IP_MULTICAST_LOOP =
-        new StdSocketOption<Boolean>("IP_MULTICAST_LOOP", Boolean.class);
-
-
-    // -- IPPROTO_TCP --
-
-    /**
-     * Disable the Nagle algorithm.
-     *
-     * <p> The value of this socket option is a {@code Boolean} that represents
-     * whether the option is enabled or disabled. The socket option is specific to
-     * stream-oriented sockets using the TCP/IP protocol. TCP/IP uses an algorithm
-     * known as <em>The Nagle Algorithm</em> to coalesce short segments and
-     * improve network efficiency.
-     *
-     * <p> The default value of this socket option is {@code FALSE}. The
-     * socket option should only be enabled in cases where it is known that the
-     * coalescing impacts performance. The socket option may be enabled at any
-     * time. In other words, the Nagle Algorithm can be disabled. Once the option
-     * is enabled, it is system dependent whether it can be subsequently
-     * disabled. If it cannot, then invoking the {@code setOption} method to
-     * disable the option has no effect.
-     *
-     * @see <a href="http://www.ietf.org/rfc/rfc1122.txt">RFC&nbsp;1122:
-     * Requirements for Internet Hosts -- Communication Layers</a>
-     * @see Socket#setTcpNoDelay
-     */
-    public static final SocketOption<Boolean> TCP_NODELAY =
-        new StdSocketOption<Boolean>("TCP_NODELAY", Boolean.class);
-
-
-    private static class StdSocketOption<T> implements SocketOption<T> {
-        private final String name;
-        private final Class<T> type;
-        StdSocketOption(String name, Class<T> type) {
-            this.name = name;
-            this.type = type;
-        }
-        @Override public String name() { return name; }
-        @Override public Class<T> type() { return type; }
-        @Override public String toString() { return name; }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/java/net/StandardSocketOptions.java	Mon May 09 18:45:33 2011 +0100
@@ -0,0 +1,367 @@
+/*
+ * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.net;
+
+/**
+ * Defines the <em>standard</em> socket options.
+ *
+ * <p> The {@link SocketOption#name name} of each socket option defined by this
+ * class is its field name.
+ *
+ * <p> In this release, the socket options defined here are used by {@link
+ * java.nio.channels.NetworkChannel network} channels in the {@link
+ * java.nio.channels channels} package.
+ *
+ * @since 1.7
+ */
+
+public final class StandardSocketOptions {
+    private StandardSocketOptions() { }
+
+    // -- SOL_SOCKET --
+
+    /**
+     * Allow transmission of broadcast datagrams.
+     *
+     * <p> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. The option is specific to
+     * datagram-oriented sockets sending to {@link java.net.Inet4Address IPv4}
+     * broadcast addresses. When the socket option is enabled then the socket
+     * can be used to send <em>broadcast datagrams</em>.
+     *
+     * <p> The initial value of this socket option is {@code FALSE}. The socket
+     * option may be enabled or disabled at any time. Some operating systems may
+     * require that the Java virtual machine be started with implementation
+     * specific privileges to enable this option or send broadcast datagrams.
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc919.txt">RFC&nbsp;929:
+     * Broadcasting Internet Datagrams</a>
+     * @see DatagramSocket#setBroadcast
+     */
+    public static final SocketOption<Boolean> SO_BROADCAST =
+        new StdSocketOption<Boolean>("SO_BROADCAST", Boolean.class);
+
+    /**
+     * Keep connection alive.
+     *
+     * <p> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. When the {@code SO_KEEPALIVE}
+     * option is enabled the operating system may use a <em>keep-alive</em>
+     * mechanism to periodically probe the other end of a connection when the
+     * connection is otherwise idle. The exact semantics of the keep alive
+     * mechanism is system dependent and therefore unspecified.
+     *
+     * <p> The initial value of this socket option is {@code FALSE}. The socket
+     * option may be enabled or disabled at any time.
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc1122.txt">RFC&nbsp;1122
+     * Requirements for Internet Hosts -- Communication Layers</a>
+     * @see Socket#setKeepAlive
+     */
+    public static final SocketOption<Boolean> SO_KEEPALIVE =
+        new StdSocketOption<Boolean>("SO_KEEPALIVE", Boolean.class);
+
+    /**
+     * The size of the socket send buffer.
+     *
+     * <p> The value of this socket option is an {@code Integer} that is the
+     * size of the socket send buffer in bytes. The socket send buffer is an
+     * output buffer used by the networking implementation. It may need to be
+     * increased for high-volume connections. The value of the socket option is
+     * a <em>hint</em> to the implementation to size the buffer and the actual
+     * size may differ. The socket option can be queried to retrieve the actual
+     * size.
+     *
+     * <p> For datagram-oriented sockets, the size of the send buffer may limit
+     * the size of the datagrams that may be sent by the socket. Whether
+     * datagrams larger than the buffer size are sent or discarded is system
+     * dependent.
+     *
+     * <p> The initial/default size of the socket send buffer and the range of
+     * allowable values is system dependent although a negative size is not
+     * allowed. An attempt to set the socket send buffer to larger than its
+     * maximum size causes it to be set to its maximum size.
+     *
+     * <p> An implementation allows this socket option to be set before the
+     * socket is bound or connected. Whether an implementation allows the
+     * socket send buffer to be changed after the socket is bound is system
+     * dependent.
+     *
+     * @see Socket#setSendBufferSize
+     */
+    public static final SocketOption<Integer> SO_SNDBUF =
+        new StdSocketOption<Integer>("SO_SNDBUF", Integer.class);
+
+
+    /**
+     * The size of the socket receive buffer.
+     *
+     * <p> The value of this socket option is an {@code Integer} that is the
+     * size of the socket receive buffer in bytes. The socket receive buffer is
+     * an input buffer used by the networking implementation. It may need to be
+     * increased for high-volume connections or decreased to limit the possible
+     * backlog of incoming data. The value of the socket option is a
+     * <em>hint</em> to the implementation to size the buffer and the actual
+     * size may differ.
+     *
+     * <p> For datagram-oriented sockets, the size of the receive buffer may
+     * limit the size of the datagrams that can be received. Whether datagrams
+     * larger than the buffer size can be received is system dependent.
+     * Increasing the socket receive buffer may be important for cases where
+     * datagrams arrive in bursts faster than they can be processed.
+     *
+     * <p> In the case of stream-oriented sockets and the TCP/IP protocol, the
+     * size of the socket receive buffer may be used when advertising the size
+     * of the TCP receive window to the remote peer.
+     *
+     * <p> The initial/default size of the socket receive buffer and the range
+     * of allowable values is system dependent although a negative size is not
+     * allowed. An attempt to set the socket receive buffer to larger than its
+     * maximum size causes it to be set to its maximum size.
+     *
+     * <p> An implementation allows this socket option to be set before the
+     * socket is bound or connected. Whether an implementation allows the
+     * socket receive buffer to be changed after the socket is bound is system
+     * dependent.
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc1323.txt">RFC&nbsp;1323: TCP
+     * Extensions for High Performance</a>
+     * @see Socket#setReceiveBufferSize
+     * @see ServerSocket#setReceiveBufferSize
+     */
+    public static final SocketOption<Integer> SO_RCVBUF =
+        new StdSocketOption<Integer>("SO_RCVBUF", Integer.class);
+
+    /**
+     * Re-use address.
+     *
+     * <p> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. The exact semantics of this
+     * socket option are socket type and system dependent.
+     *
+     * <p> In the case of stream-oriented sockets, this socket option will
+     * usually determine whether the socket can be bound to a socket address
+     * when a previous connection involving that socket address is in the
+     * <em>TIME_WAIT</em> state. On implementations where the semantics differ,
+     * and the socket option is not required to be enabled in order to bind the
+     * socket when a previous connection is in this state, then the
+     * implementation may choose to ignore this option.
+     *
+     * <p> For datagram-oriented sockets the socket option is used to allow
+     * multiple programs bind to the same address. This option should be enabled
+     * when the socket is to be used for Internet Protocol (IP) multicasting.
+     *
+     * <p> An implementation allows this socket option to be set before the
+     * socket is bound or connected. Changing the value of this socket option
+     * after the socket is bound has no effect. The default value of this
+     * socket option is system dependent.
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc793.txt">RFC&nbsp;793: Transmission
+     * Control Protocol</a>
+     * @see ServerSocket#setReuseAddress
+     */
+    public static final SocketOption<Boolean> SO_REUSEADDR =
+        new StdSocketOption<Boolean>("SO_REUSEADDR", Boolean.class);
+
+    /**
+     * Linger on close if data is present.
+     *
+     * <p> The value of this socket option is an {@code Integer} that controls
+     * the action taken when unsent data is queued on the socket and a method
+     * to close the socket is invoked. If the value of the socket option is zero
+     * or greater, then it represents a timeout value, in seconds, known as the
+     * <em>linger interval</em>. The linger interval is the timeout for the
+     * {@code close} method to block while the operating system attempts to
+     * transmit the unsent data or it decides that it is unable to transmit the
+     * data. If the value of the socket option is less than zero then the option
+     * is disabled. In that case the {@code close} method does not wait until
+     * unsent data is transmitted; if possible the operating system will transmit
+     * any unsent data before the connection is closed.
+     *
+     * <p> This socket option is intended for use with sockets that are configured
+     * in {@link java.nio.channels.SelectableChannel#isBlocking() blocking} mode
+     * only. The behavior of the {@code close} method when this option is
+     * enabled on a non-blocking socket is not defined.
+     *
+     * <p> The initial value of this socket option is a negative value, meaning
+     * that the option is disabled. The option may be enabled, or the linger
+     * interval changed, at any time. The maximum value of the linger interval
+     * is system dependent. Setting the linger interval to a value that is
+     * greater than its maximum value causes the linger interval to be set to
+     * its maximum value.
+     *
+     * @see Socket#setSoLinger
+     */
+    public static final SocketOption<Integer> SO_LINGER =
+        new StdSocketOption<Integer>("SO_LINGER", Integer.class);
+
+
+    // -- IPPROTO_IP --
+
+    /**
+     * The Type of Service (ToS) octet in the Internet Protocol (IP) header.
+     *
+     * <p> The value of this socket option is an {@code Integer} representing
+     * the value of the ToS octet in IP packets sent by sockets to an {@link
+     * StandardProtocolFamily#INET IPv4} socket. The interpretation of the ToS
+     * octet is network specific and is not defined by this class. Further
+     * information on the ToS octet can be found in <a
+     * href="http://www.ietf.org/rfc/rfc1349.txt">RFC&nbsp;1349</a> and <a
+     * href="http://www.ietf.org/rfc/rfc2474.txt">RFC&nbsp;2474</a>. The value
+     * of the socket option is a <em>hint</em>. An implementation may ignore the
+     * value, or ignore specific values.
+     *
+     * <p> The initial/default value of the TOS field in the ToS octet is
+     * implementation specific but will typically be {@code 0}. For
+     * datagram-oriented sockets the option may be configured at any time after
+     * the socket has been bound. The new value of the octet is used when sending
+     * subsequent datagrams. It is system dependent whether this option can be
+     * queried or changed prior to binding the socket.
+     *
+     * <p> The behavior of this socket option on a stream-oriented socket, or an
+     * {@link StandardProtocolFamily#INET6 IPv6} socket, is not defined in this
+     * release.
+     *
+     * @see DatagramSocket#setTrafficClass
+     */
+    public static final SocketOption<Integer> IP_TOS =
+        new StdSocketOption<Integer>("IP_TOS", Integer.class);
+
+    /**
+     * The network interface for Internet Protocol (IP) multicast datagrams.
+     *
+     * <p> The value of this socket option is a {@link NetworkInterface} that
+     * represents the outgoing interface for multicast datagrams sent by the
+     * datagram-oriented socket. For {@link StandardProtocolFamily#INET6 IPv6}
+     * sockets then it is system dependent whether setting this option also
+     * sets the outgoing interface for multlicast datagrams sent to IPv4
+     * addresses.
+     *
+     * <p> The initial/default value of this socket option may be {@code null}
+     * to indicate that outgoing interface will be selected by the operating
+     * system, typically based on the network routing tables. An implementation
+     * allows this socket option to be set after the socket is bound. Whether
+     * the socket option can be queried or changed prior to binding the socket
+     * is system dependent.
+     *
+     * @see java.nio.channels.MulticastChannel
+     * @see MulticastSocket#setInterface
+     */
+    public static final SocketOption<NetworkInterface> IP_MULTICAST_IF =
+        new StdSocketOption<NetworkInterface>("IP_MULTICAST_IF", NetworkInterface.class);
+
+    /**
+     * The <em>time-to-live</em> for Internet Protocol (IP) multicast datagrams.
+     *
+     * <p> The value of this socket option is an {@code Integer} in the range
+     * <tt>0&nbsp;<=&nbsp;value&nbsp;<=&nbsp;255</tt>. It is used to control
+     * the scope of multicast datagrams sent by the datagram-oriented socket.
+     * In the case of an {@link StandardProtocolFamily#INET IPv4} socket
+     * the option is the time-to-live (TTL) on multicast datagrams sent by the
+     * socket. Datagrams with a TTL of zero are not transmitted on the network
+     * but may be delivered locally. In the case of an {@link
+     * StandardProtocolFamily#INET6 IPv6} socket the option is the
+     * <em>hop limit</em> which is number of <em>hops</em> that the datagram can
+     * pass through before expiring on the network. For IPv6 sockets it is
+     * system dependent whether the option also sets the <em>time-to-live</em>
+     * on multicast datagrams sent to IPv4 addresses.
+     *
+     * <p> The initial/default value of the time-to-live setting is typically
+     * {@code 1}. An implementation allows this socket option to be set after
+     * the socket is bound. Whether the socket option can be queried or changed
+     * prior to binding the socket is system dependent.
+     *
+     * @see java.nio.channels.MulticastChannel
+     * @see MulticastSocket#setTimeToLive
+     */
+    public static final SocketOption<Integer> IP_MULTICAST_TTL =
+        new StdSocketOption<Integer>("IP_MULTICAST_TTL", Integer.class);
+
+    /**
+     * Loopback for Internet Protocol (IP) multicast datagrams.
+     *
+     * <p> The value of this socket option is a {@code Boolean} that controls
+     * the <em>loopback</em> of multicast datagrams. The value of the socket
+     * option represents if the option is enabled or disabled.
+     *
+     * <p> The exact semantics of this socket options are system dependent.
+     * In particular, it is system dependent whether the loopback applies to
+     * multicast datagrams sent from the socket or received by the socket.
+     * For {@link StandardProtocolFamily#INET6 IPv6} sockets then it is
+     * system dependent whether the option also applies to multicast datagrams
+     * sent to IPv4 addresses.
+     *
+     * <p> The initial/default value of this socket option is {@code TRUE}. An
+     * implementation allows this socket option to be set after the socket is
+     * bound. Whether the socket option can be queried or changed prior to
+     * binding the socket is system dependent.
+     *
+     * @see java.nio.channels.MulticastChannel
+     *  @see MulticastSocket#setLoopbackMode
+     */
+    public static final SocketOption<Boolean> IP_MULTICAST_LOOP =
+        new StdSocketOption<Boolean>("IP_MULTICAST_LOOP", Boolean.class);
+
+
+    // -- IPPROTO_TCP --
+
+    /**
+     * Disable the Nagle algorithm.
+     *
+     * <p> The value of this socket option is a {@code Boolean} that represents
+     * whether the option is enabled or disabled. The socket option is specific to
+     * stream-oriented sockets using the TCP/IP protocol. TCP/IP uses an algorithm
+     * known as <em>The Nagle Algorithm</em> to coalesce short segments and
+     * improve network efficiency.
+     *
+     * <p> The default value of this socket option is {@code FALSE}. The
+     * socket option should only be enabled in cases where it is known that the
+     * coalescing impacts performance. The socket option may be enabled at any
+     * time. In other words, the Nagle Algorithm can be disabled. Once the option
+     * is enabled, it is system dependent whether it can be subsequently
+     * disabled. If it cannot, then invoking the {@code setOption} method to
+     * disable the option has no effect.
+     *
+     * @see <a href="http://www.ietf.org/rfc/rfc1122.txt">RFC&nbsp;1122:
+     * Requirements for Internet Hosts -- Communication Layers</a>
+     * @see Socket#setTcpNoDelay
+     */
+    public static final SocketOption<Boolean> TCP_NODELAY =
+        new StdSocketOption<Boolean>("TCP_NODELAY", Boolean.class);
+
+
+    private static class StdSocketOption<T> implements SocketOption<T> {
+        private final String name;
+        private final Class<T> type;
+        StdSocketOption(String name, Class<T> type) {
+            this.name = name;
+            this.type = type;
+        }
+        @Override public String name() { return name; }
+        @Override public Class<T> type() { return type; }
+        @Override public String toString() { return name; }
+    }
+}
--- a/src/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/AsynchronousServerSocketChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -58,11 +58,11 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
  *     <td> Re-use address </td>
  *   </tr>
  * </table>
--- a/src/share/classes/java/nio/channels/AsynchronousSocketChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/AsynchronousSocketChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -68,23 +68,23 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
  *     <td> The size of the socket send buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_KEEPALIVE SO_KEEPALIVE} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </td>
  *     <td> Keep connection alive </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
  *     <td> Re-use address </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#TCP_NODELAY TCP_NODELAY} </td>
+ *     <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
  *     <td> Disable the Nagle algorithm </td>
  *   </tr>
  * </table>
--- a/src/share/classes/java/nio/channels/DatagramChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/DatagramChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -63,37 +63,37 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
  *     <td> The size of the socket send buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
  *     <td> Re-use address </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_BROADCAST SO_BROADCAST} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_BROADCAST SO_BROADCAST} </td>
  *     <td> Allow transmission of broadcast datagrams </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#IP_TOS IP_TOS} </td>
+ *     <td> {@link java.net.StandardSocketOptions#IP_TOS IP_TOS} </td>
  *     <td> The Type of Service (ToS) octet in the Internet Protocol (IP) header </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#IP_MULTICAST_IF IP_MULTICAST_IF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_IF IP_MULTICAST_IF} </td>
  *     <td> The network interface for Internet Protocol (IP) multicast datagrams </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#IP_MULTICAST_TTL
+ *     <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_TTL
  *       IP_MULTICAST_TTL} </td>
  *     <td> The <em>time-to-live</em> for Internet Protocol (IP) multicast
  *       datagrams </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#IP_MULTICAST_LOOP
+ *     <td> {@link java.net.StandardSocketOptions#IP_MULTICAST_LOOP
  *       IP_MULTICAST_LOOP} </td>
  *     <td> Loopback for Internet Protocol (IP) multicast datagrams </td>
  *   </tr>
--- a/src/share/classes/java/nio/channels/MulticastChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/MulticastChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -30,7 +30,7 @@
 import java.io.IOException;
 import java.net.ProtocolFamily;             // javadoc
 import java.net.StandardProtocolFamily;     // javadoc
-import java.net.StandardSocketOption;       // javadoc
+import java.net.StandardSocketOptions;      // javadoc
 
 /**
  * A network channel that supports Internet Protocol (IP) multicasting.
@@ -93,7 +93,7 @@
  * a specific address, rather than the wildcard address then it is implementation
  * specific if multicast datagrams are received by the socket. </p></li>
  *
- * <li><p> The {@link StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} option should be
+ * <li><p> The {@link StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} option should be
  * enabled prior to {@link NetworkChannel#bind binding} the socket. This is
  * required to allow multiple members of the group to bind to the same
  * address. </p></li>
@@ -107,9 +107,9 @@
  *     NetworkInterface ni = NetworkInterface.getByName("hme0");
  *
  *     DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
- *         .setOption(StandardSocketOption.SO_REUSEADDR, true)
+ *         .setOption(StandardSocketOptions.SO_REUSEADDR, true)
  *         .bind(new InetSocketAddress(5000))
- *         .setOption(StandardSocketOption.IP_MULTICAST_IF, ni);
+ *         .setOption(StandardSocketOptions.IP_MULTICAST_IF, ni);
  *
  *     InetAddress group = InetAddress.getByName("225.4.5.6");
  *
--- a/src/share/classes/java/nio/channels/NetworkChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/NetworkChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -124,7 +124,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see java.net.StandardSocketOption
+     * @see java.net.StandardSocketOptions
      */
     <T> NetworkChannel setOption(SocketOption<T> name, T value) throws IOException;
 
@@ -144,7 +144,7 @@
      * @throws  IOException
      *          If an I/O error occurs
      *
-     * @see java.net.StandardSocketOption
+     * @see java.net.StandardSocketOptions
      */
     <T> T getOption(SocketOption<T> name) throws IOException;
 
--- a/src/share/classes/java/nio/channels/ServerSocketChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/ServerSocketChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -52,11 +52,11 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
  *     <td> Re-use address </td>
  *   </tr>
  * </table>
--- a/src/share/classes/java/nio/channels/SocketChannel.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/channels/SocketChannel.java	Mon May 09 18:45:33 2011 +0100
@@ -72,28 +72,28 @@
  *     <th>Description</th>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_SNDBUF SO_SNDBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF} </td>
  *     <td> The size of the socket send buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_RCVBUF SO_RCVBUF} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF} </td>
  *     <td> The size of the socket receive buffer </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_KEEPALIVE SO_KEEPALIVE} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE} </td>
  *     <td> Keep connection alive </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_REUSEADDR SO_REUSEADDR} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR} </td>
  *     <td> Re-use address </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#SO_LINGER SO_LINGER} </td>
+ *     <td> {@link java.net.StandardSocketOptions#SO_LINGER SO_LINGER} </td>
  *     <td> Linger on close if data is present (when configured in blocking mode
  *          only) </td>
  *   </tr>
  *   <tr>
- *     <td> {@link java.net.StandardSocketOption#TCP_NODELAY TCP_NODELAY} </td>
+ *     <td> {@link java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY} </td>
  *     <td> Disable the Nagle algorithm </td>
  *   </tr>
  * </table>
--- a/src/share/classes/java/nio/file/Path.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/file/Path.java	Mon May 09 18:45:33 2011 +0100
@@ -609,11 +609,11 @@
      * directory can be watched. The {@code events} parameter is the events to
      * register and may contain the following events:
      * <ul>
-     *   <li>{@link StandardWatchEventKind#ENTRY_CREATE ENTRY_CREATE} -
+     *   <li>{@link StandardWatchEventKinds#ENTRY_CREATE ENTRY_CREATE} -
      *       entry created or moved into the directory</li>
-     *   <li>{@link StandardWatchEventKind#ENTRY_DELETE ENTRY_DELETE} -
+     *   <li>{@link StandardWatchEventKinds#ENTRY_DELETE ENTRY_DELETE} -
      *        entry deleted or moved out of the directory</li>
-     *   <li>{@link StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} -
+     *   <li>{@link StandardWatchEventKinds#ENTRY_MODIFY ENTRY_MODIFY} -
      *        entry in directory was modified</li>
      * </ul>
      *
@@ -622,7 +622,7 @@
      * that locates the directory entry that is created, deleted, or modified.
      *
      * <p> The set of events may include additional implementation specific
-     * event that are not defined by the enum {@link StandardWatchEventKind}
+     * event that are not defined by the enum {@link StandardWatchEventKinds}
      *
      * <p> The {@code modifiers} parameter specifies <em>modifiers</em> that
      * qualify how the directory is registered. This release does not define any
--- a/src/share/classes/java/nio/file/StandardWatchEventKind.java	Mon May 09 08:58:00 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package java.nio.file;
-
-/**
- * Defines the <em>standard</em> event kinds.
- *
- * @since 1.7
- */
-
-public final class StandardWatchEventKind {
-    private StandardWatchEventKind() { }
-
-    /**
-     * A special event to indicate that events may have been lost or
-     * discarded.
-     *
-     * <p> The {@link WatchEvent#context context} for this event is
-     * implementation specific and may be {@code null}. The event {@link
-     * WatchEvent#count count} may be greater than {@code 1}.
-     *
-     * @see WatchService
-     */
-    public static final WatchEvent.Kind<Void> OVERFLOW =
-        new StdWatchEventKind<Void>("OVERFLOW", Void.class);
-
-    /**
-     * Directory entry created.
-     *
-     * <p> When a directory is registered for this event then the {@link WatchKey}
-     * is queued when it is observed that an entry is created in the directory
-     * or renamed into the directory. The event {@link WatchEvent#count count}
-     * for this event is always {@code 1}.
-     */
-    public static final WatchEvent.Kind<Path> ENTRY_CREATE =
-        new StdWatchEventKind<Path>("ENTRY_CREATE", Path.class);
-
-    /**
-     * Directory entry deleted.
-     *
-     * <p> When a directory is registered for this event then the {@link WatchKey}
-     * is queued when it is observed that an entry is deleted or renamed out of
-     * the directory. The event {@link WatchEvent#count count} for this event
-     * is always {@code 1}.
-     */
-    public static final WatchEvent.Kind<Path> ENTRY_DELETE =
-        new StdWatchEventKind<Path>("ENTRY_DELETE", Path.class);
-
-    /**
-     * Directory entry modified.
-     *
-     * <p> When a directory is registered for this event then the {@link WatchKey}
-     * is queued when it is observed that an entry in the directory has been
-     * modified. The event {@link WatchEvent#count count} for this event is
-     * {@code 1} or greater.
-     */
-    public static final WatchEvent.Kind<Path> ENTRY_MODIFY =
-        new StdWatchEventKind<Path>("ENTRY_MODIFY", Path.class);
-
-    private static class StdWatchEventKind<T> implements WatchEvent.Kind<T> {
-        private final String name;
-        private final Class<T> type;
-        StdWatchEventKind(String name, Class<T> type) {
-            this.name = name;
-            this.type = type;
-        }
-        @Override public String name() { return name; }
-        @Override public Class<T> type() { return type; }
-        @Override public String toString() { return name; }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/java/nio/file/StandardWatchEventKinds.java	Mon May 09 18:45:33 2011 +0100
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.nio.file;
+
+/**
+ * Defines the <em>standard</em> event kinds.
+ *
+ * @since 1.7
+ */
+
+public final class StandardWatchEventKinds {
+    private StandardWatchEventKinds() { }
+
+    /**
+     * A special event to indicate that events may have been lost or
+     * discarded.
+     *
+     * <p> The {@link WatchEvent#context context} for this event is
+     * implementation specific and may be {@code null}. The event {@link
+     * WatchEvent#count count} may be greater than {@code 1}.
+     *
+     * @see WatchService
+     */
+    public static final WatchEvent.Kind<Object> OVERFLOW =
+        new StdWatchEventKind<Object>("OVERFLOW", Object.class);
+
+    /**
+     * Directory entry created.
+     *
+     * <p> When a directory is registered for this event then the {@link WatchKey}
+     * is queued when it is observed that an entry is created in the directory
+     * or renamed into the directory. The event {@link WatchEvent#count count}
+     * for this event is always {@code 1}.
+     */
+    public static final WatchEvent.Kind<Path> ENTRY_CREATE =
+        new StdWatchEventKind<Path>("ENTRY_CREATE", Path.class);
+
+    /**
+     * Directory entry deleted.
+     *
+     * <p> When a directory is registered for this event then the {@link WatchKey}
+     * is queued when it is observed that an entry is deleted or renamed out of
+     * the directory. The event {@link WatchEvent#count count} for this event
+     * is always {@code 1}.
+     */
+    public static final WatchEvent.Kind<Path> ENTRY_DELETE =
+        new StdWatchEventKind<Path>("ENTRY_DELETE", Path.class);
+
+    /**
+     * Directory entry modified.
+     *
+     * <p> When a directory is registered for this event then the {@link WatchKey}
+     * is queued when it is observed that an entry in the directory has been
+     * modified. The event {@link WatchEvent#count count} for this event is
+     * {@code 1} or greater.
+     */
+    public static final WatchEvent.Kind<Path> ENTRY_MODIFY =
+        new StdWatchEventKind<Path>("ENTRY_MODIFY", Path.class);
+
+    private static class StdWatchEventKind<T> implements WatchEvent.Kind<T> {
+        private final String name;
+        private final Class<T> type;
+        StdWatchEventKind(String name, Class<T> type) {
+            this.name = name;
+            this.type = type;
+        }
+        @Override public String name() { return name; }
+        @Override public Class<T> type() { return type; }
+        @Override public String toString() { return name; }
+    }
+}
--- a/src/share/classes/java/nio/file/WatchEvent.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/file/WatchEvent.java	Mon May 09 18:45:33 2011 +0100
@@ -50,7 +50,7 @@
      * An event kind, for the purposes of identification.
      *
      * @since 1.7
-     * @see StandardWatchEventKind
+     * @see StandardWatchEventKinds
      */
     public static interface Kind<T> {
         /**
@@ -98,9 +98,9 @@
     /**
      * Returns the context for the event.
      *
-     * <p> In the case of {@link StandardWatchEventKind#ENTRY_CREATE ENTRY_CREATE},
-     * {@link StandardWatchEventKind#ENTRY_DELETE ENTRY_DELETE}, and {@link
-     * StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} events the context is
+     * <p> In the case of {@link StandardWatchEventKinds#ENTRY_CREATE ENTRY_CREATE},
+     * {@link StandardWatchEventKinds#ENTRY_DELETE ENTRY_DELETE}, and {@link
+     * StandardWatchEventKinds#ENTRY_MODIFY ENTRY_MODIFY} events the context is
      * a {@code Path} that is the {@link Path#relativize relative} path between
      * the directory registered with the watch service, and the entry that is
      * created, deleted, or modified.
--- a/src/share/classes/java/nio/file/WatchService.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/file/WatchService.java	Mon May 09 18:45:33 2011 +0100
@@ -68,7 +68,7 @@
  * of events that it may accumulate. Where an implementation <em>knowingly</em>
  * discards events then it arranges for the key's {@link WatchKey#pollEvents
  * pollEvents} method to return an element with an event type of {@link
- * StandardWatchEventKind#OVERFLOW OVERFLOW}. This event can be used by the
+ * StandardWatchEventKinds#OVERFLOW OVERFLOW}. This event can be used by the
  * consumer as a trigger to re-examine the state of the object.
  *
  * <p> When an event is reported to indicate that a file in a watched directory
@@ -87,7 +87,7 @@
  * are detected, their timeliness, and whether their ordering is preserved are
  * highly implementation specific. For example, when a file in a watched
  * directory is modified then it may result in a single {@link
- * StandardWatchEventKind#ENTRY_MODIFY ENTRY_MODIFY} event in some
+ * StandardWatchEventKinds#ENTRY_MODIFY ENTRY_MODIFY} event in some
  * implementations but several events in other implementations. Short-lived
  * files (meaning files that are deleted very quickly after they are created)
  * may not be detected by primitive implementations that periodically poll the
--- a/src/share/classes/java/nio/file/Watchable.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/java/nio/file/Watchable.java	Mon May 09 18:45:33 2011 +0100
@@ -53,7 +53,7 @@
      * those specified by the {@code events} and {@code modifiers} parameters.
      * Changing the event set does not cause pending events for the object to be
      * discarded. Objects are automatically registered for the {@link
-     * StandardWatchEventKind#OVERFLOW OVERFLOW} event. This event is not
+     * StandardWatchEventKinds#OVERFLOW OVERFLOW} event. This event is not
      * required to be present in the array of events.
      *
      * <p> Otherwise the file system object has not yet been registered with the
--- a/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -28,7 +28,7 @@
 import java.nio.channels.*;
 import java.net.SocketAddress;
 import java.net.SocketOption;
-import java.net.StandardSocketOption;
+import java.net.StandardSocketOptions;
 import java.net.InetSocketAddress;
 import java.io.FileDescriptor;
 import java.io.IOException;
@@ -214,8 +214,8 @@
 
         private static Set<SocketOption<?>> defaultOptions() {
             HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2);
-            set.add(StandardSocketOption.SO_RCVBUF);
-            set.add(StandardSocketOption.SO_REUSEADDR);
+            set.add(StandardSocketOptions.SO_RCVBUF);
+            set.add(StandardSocketOptions.SO_REUSEADDR);
             return Collections.unmodifiableSet(set);
         }
     }
--- a/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -28,7 +28,7 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.*;
 import java.net.SocketOption;
-import java.net.StandardSocketOption;
+import java.net.StandardSocketOptions;
 import java.net.SocketAddress;
 import java.net.InetSocketAddress;
 import java.io.IOException;
@@ -483,11 +483,11 @@
 
         private static Set<SocketOption<?>> defaultOptions() {
             HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(5);
-            set.add(StandardSocketOption.SO_SNDBUF);
-            set.add(StandardSocketOption.SO_RCVBUF);
-            set.add(StandardSocketOption.SO_KEEPALIVE);
-            set.add(StandardSocketOption.SO_REUSEADDR);
-            set.add(StandardSocketOption.TCP_NODELAY);
+            set.add(StandardSocketOptions.SO_SNDBUF);
+            set.add(StandardSocketOptions.SO_RCVBUF);
+            set.add(StandardSocketOptions.SO_KEEPALIVE);
+            set.add(StandardSocketOptions.SO_REUSEADDR);
+            set.add(StandardSocketOptions.TCP_NODELAY);
             return Collections.unmodifiableSet(set);
         }
     }
--- a/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -188,7 +188,7 @@
         synchronized (stateLock) {
             ensureOpen();
 
-            if (name == StandardSocketOption.IP_TOS) {
+            if (name == StandardSocketOptions.IP_TOS) {
                 // IPv4 only; no-op for IPv6
                 if (family == StandardProtocolFamily.INET) {
                     Net.setSocketOption(fd, family, name, value);
@@ -196,15 +196,15 @@
                 return this;
             }
 
-            if (name == StandardSocketOption.IP_MULTICAST_TTL ||
-                name == StandardSocketOption.IP_MULTICAST_LOOP)
+            if (name == StandardSocketOptions.IP_MULTICAST_TTL ||
+                name == StandardSocketOptions.IP_MULTICAST_LOOP)
             {
                 // options are protocol dependent
                 Net.setSocketOption(fd, family, name, value);
                 return this;
             }
 
-            if (name == StandardSocketOption.IP_MULTICAST_IF) {
+            if (name == StandardSocketOptions.IP_MULTICAST_IF) {
                 if (value == null)
                     throw new IllegalArgumentException("Cannot set IP_MULTICAST_IF to 'null'");
                 NetworkInterface interf = (NetworkInterface)value;
@@ -243,7 +243,7 @@
         synchronized (stateLock) {
             ensureOpen();
 
-            if (name == StandardSocketOption.IP_TOS) {
+            if (name == StandardSocketOptions.IP_TOS) {
                 // IPv4 only; always return 0 on IPv6
                 if (family == StandardProtocolFamily.INET) {
                     return (T) Net.getSocketOption(fd, family, name);
@@ -252,13 +252,13 @@
                 }
             }
 
-            if (name == StandardSocketOption.IP_MULTICAST_TTL ||
-                name == StandardSocketOption.IP_MULTICAST_LOOP)
+            if (name == StandardSocketOptions.IP_MULTICAST_TTL ||
+                name == StandardSocketOptions.IP_MULTICAST_LOOP)
             {
                 return (T) Net.getSocketOption(fd, family, name);
             }
 
-            if (name == StandardSocketOption.IP_MULTICAST_IF) {
+            if (name == StandardSocketOptions.IP_MULTICAST_IF) {
                 if (family == StandardProtocolFamily.INET) {
                     int address = Net.getInterface4(fd);
                     if (address == 0)
@@ -291,14 +291,14 @@
 
         private static Set<SocketOption<?>> defaultOptions() {
             HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(8);
-            set.add(StandardSocketOption.SO_SNDBUF);
-            set.add(StandardSocketOption.SO_RCVBUF);
-            set.add(StandardSocketOption.SO_REUSEADDR);
-            set.add(StandardSocketOption.SO_BROADCAST);
-            set.add(StandardSocketOption.IP_TOS);
-            set.add(StandardSocketOption.IP_MULTICAST_IF);
-            set.add(StandardSocketOption.IP_MULTICAST_TTL);
-            set.add(StandardSocketOption.IP_MULTICAST_LOOP);
+            set.add(StandardSocketOptions.SO_SNDBUF);
+            set.add(StandardSocketOptions.SO_RCVBUF);
+            set.add(StandardSocketOptions.SO_REUSEADDR);
+            set.add(StandardSocketOptions.SO_BROADCAST);
+            set.add(StandardSocketOptions.IP_TOS);
+            set.add(StandardSocketOptions.IP_MULTICAST_IF);
+            set.add(StandardSocketOptions.IP_MULTICAST_TTL);
+            set.add(StandardSocketOptions.IP_MULTICAST_LOOP);
             return Collections.unmodifiableSet(set);
         }
     }
--- a/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java	Mon May 09 18:45:33 2011 +0100
@@ -312,46 +312,46 @@
     public void setSendBufferSize(int size) throws SocketException {
         if (size <= 0)
             throw new IllegalArgumentException("Invalid send size");
-        setIntOption(StandardSocketOption.SO_SNDBUF, size);
+        setIntOption(StandardSocketOptions.SO_SNDBUF, size);
     }
 
     public int getSendBufferSize() throws SocketException {
-        return getIntOption(StandardSocketOption.SO_SNDBUF);
+        return getIntOption(StandardSocketOptions.SO_SNDBUF);
     }
 
     public void setReceiveBufferSize(int size) throws SocketException {
         if (size <= 0)
             throw new IllegalArgumentException("Invalid receive size");
-        setIntOption(StandardSocketOption.SO_RCVBUF, size);
+        setIntOption(StandardSocketOptions.SO_RCVBUF, size);
     }
 
     public int getReceiveBufferSize() throws SocketException {
-        return getIntOption(StandardSocketOption.SO_RCVBUF);
+        return getIntOption(StandardSocketOptions.SO_RCVBUF);
     }
 
     public void setReuseAddress(boolean on) throws SocketException {
-        setBooleanOption(StandardSocketOption.SO_REUSEADDR, on);
+        setBooleanOption(StandardSocketOptions.SO_REUSEADDR, on);
     }
 
     public boolean getReuseAddress() throws SocketException {
-        return getBooleanOption(StandardSocketOption.SO_REUSEADDR);
+        return getBooleanOption(StandardSocketOptions.SO_REUSEADDR);
 
     }
 
     public void setBroadcast(boolean on) throws SocketException {
-        setBooleanOption(StandardSocketOption.SO_BROADCAST, on);
+        setBooleanOption(StandardSocketOptions.SO_BROADCAST, on);
     }
 
     public boolean getBroadcast() throws SocketException {
-        return getBooleanOption(StandardSocketOption.SO_BROADCAST);
+        return getBooleanOption(StandardSocketOptions.SO_BROADCAST);
     }
 
     public void setTrafficClass(int tc) throws SocketException {
-        setIntOption(StandardSocketOption.IP_TOS, tc);
+        setIntOption(StandardSocketOptions.IP_TOS, tc);
     }
 
     public int getTrafficClass() throws SocketException {
-        return getIntOption(StandardSocketOption.IP_TOS);
+        return getIntOption(StandardSocketOptions.IP_TOS);
     }
 
     public void close() {
--- a/src/share/classes/sun/nio/ch/ExtendedSocketOption.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/ExtendedSocketOption.java	Mon May 09 18:45:33 2011 +0100
@@ -29,7 +29,7 @@
 
 /**
  * Defines socket options that are supported by the implementation
- * but not defined in StandardSocketOption.
+ * but not defined in StandardSocketOptions.
  */
 
 class ExtendedSocketOption {
--- a/src/share/classes/sun/nio/ch/Net.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/Net.java	Mon May 09 18:45:33 2011 +0100
@@ -237,26 +237,26 @@
             throw new AssertionError("Should not reach here");
 
         // special handling
-        if (name == StandardSocketOption.SO_RCVBUF ||
-            name == StandardSocketOption.SO_SNDBUF)
+        if (name == StandardSocketOptions.SO_RCVBUF ||
+            name == StandardSocketOptions.SO_SNDBUF)
         {
             int i = ((Integer)value).intValue();
             if (i < 0)
                 throw new IllegalArgumentException("Invalid send/receive buffer size");
         }
-        if (name == StandardSocketOption.SO_LINGER) {
+        if (name == StandardSocketOptions.SO_LINGER) {
             int i = ((Integer)value).intValue();
             if (i < 0)
                 value = Integer.valueOf(-1);
             if (i > 65535)
                 value = Integer.valueOf(65535);
         }
-        if (name == StandardSocketOption.IP_TOS) {
+        if (name == StandardSocketOptions.IP_TOS) {
             int i = ((Integer)value).intValue();
             if (i < 0 || i > 255)
                 throw new IllegalArgumentException("Invalid IP_TOS value");
         }
-        if (name == StandardSocketOption.IP_MULTICAST_TTL) {
+        if (name == StandardSocketOptions.IP_MULTICAST_TTL) {
             int i = ((Integer)value).intValue();
             if (i < 0 || i > 255)
                 throw new IllegalArgumentException("Invalid TTL/hop value");
--- a/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java	Mon May 09 18:45:33 2011 +0100
@@ -169,7 +169,7 @@
 
     public void setReuseAddress(boolean on) throws SocketException {
         try {
-            ssc.setOption(StandardSocketOption.SO_REUSEADDR, on);
+            ssc.setOption(StandardSocketOptions.SO_REUSEADDR, on);
         } catch (IOException x) {
             Net.translateToSocketException(x);
         }
@@ -177,7 +177,7 @@
 
     public boolean getReuseAddress() throws SocketException {
         try {
-            return ssc.getOption(StandardSocketOption.SO_REUSEADDR).booleanValue();
+            return ssc.getOption(StandardSocketOptions.SO_REUSEADDR).booleanValue();
         } catch (IOException x) {
             Net.translateToSocketException(x);
             return false;       // Never happens
@@ -197,7 +197,7 @@
         if (size <= 0)
             throw new IllegalArgumentException("size cannot be 0 or negative");
         try {
-            ssc.setOption(StandardSocketOption.SO_RCVBUF, size);
+            ssc.setOption(StandardSocketOptions.SO_RCVBUF, size);
         } catch (IOException x) {
             Net.translateToSocketException(x);
         }
@@ -205,7 +205,7 @@
 
     public int getReceiveBufferSize() throws SocketException {
         try {
-            return ssc.getOption(StandardSocketOption.SO_RCVBUF).intValue();
+            return ssc.getOption(StandardSocketOptions.SO_RCVBUF).intValue();
         } catch (IOException x) {
             Net.translateToSocketException(x);
             return -1;          // Never happens
--- a/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -160,8 +160,8 @@
 
         private static Set<SocketOption<?>> defaultOptions() {
             HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2);
-            set.add(StandardSocketOption.SO_RCVBUF);
-            set.add(StandardSocketOption.SO_REUSEADDR);
+            set.add(StandardSocketOptions.SO_RCVBUF);
+            set.add(StandardSocketOptions.SO_REUSEADDR);
             return Collections.unmodifiableSet(set);
         }
     }
--- a/src/share/classes/sun/nio/ch/SocketAdaptor.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/SocketAdaptor.java	Mon May 09 18:45:33 2011 +0100
@@ -318,21 +318,21 @@
     }
 
     public void setTcpNoDelay(boolean on) throws SocketException {
-        setBooleanOption(StandardSocketOption.TCP_NODELAY, on);
+        setBooleanOption(StandardSocketOptions.TCP_NODELAY, on);
     }
 
     public boolean getTcpNoDelay() throws SocketException {
-        return getBooleanOption(StandardSocketOption.TCP_NODELAY);
+        return getBooleanOption(StandardSocketOptions.TCP_NODELAY);
     }
 
     public void setSoLinger(boolean on, int linger) throws SocketException {
         if (!on)
             linger = -1;
-        setIntOption(StandardSocketOption.SO_LINGER, linger);
+        setIntOption(StandardSocketOptions.SO_LINGER, linger);
     }
 
     public int getSoLinger() throws SocketException {
-        return getIntOption(StandardSocketOption.SO_LINGER);
+        return getIntOption(StandardSocketOptions.SO_LINGER);
     }
 
     public void sendUrgentData(int data) throws IOException {
@@ -366,46 +366,46 @@
         // size 0 valid for SocketChannel, invalid for Socket
         if (size <= 0)
             throw new IllegalArgumentException("Invalid send size");
-        setIntOption(StandardSocketOption.SO_SNDBUF, size);
+        setIntOption(StandardSocketOptions.SO_SNDBUF, size);
     }
 
     public int getSendBufferSize() throws SocketException {
-        return getIntOption(StandardSocketOption.SO_SNDBUF);
+        return getIntOption(StandardSocketOptions.SO_SNDBUF);
     }
 
     public void setReceiveBufferSize(int size) throws SocketException {
         // size 0 valid for SocketChannel, invalid for Socket
         if (size <= 0)
             throw new IllegalArgumentException("Invalid receive size");
-        setIntOption(StandardSocketOption.SO_RCVBUF, size);
+        setIntOption(StandardSocketOptions.SO_RCVBUF, size);
     }
 
     public int getReceiveBufferSize() throws SocketException {
-        return getIntOption(StandardSocketOption.SO_RCVBUF);
+        return getIntOption(StandardSocketOptions.SO_RCVBUF);
     }
 
     public void setKeepAlive(boolean on) throws SocketException {
-        setBooleanOption(StandardSocketOption.SO_KEEPALIVE, on);
+        setBooleanOption(StandardSocketOptions.SO_KEEPALIVE, on);
     }
 
     public boolean getKeepAlive() throws SocketException {
-        return getBooleanOption(StandardSocketOption.SO_KEEPALIVE);
+        return getBooleanOption(StandardSocketOptions.SO_KEEPALIVE);
     }
 
     public void setTrafficClass(int tc) throws SocketException {
-        setIntOption(StandardSocketOption.IP_TOS, tc);
+        setIntOption(StandardSocketOptions.IP_TOS, tc);
     }
 
     public int getTrafficClass() throws SocketException {
-        return getIntOption(StandardSocketOption.IP_TOS);
+        return getIntOption(StandardSocketOptions.IP_TOS);
     }
 
     public void setReuseAddress(boolean on) throws SocketException {
-        setBooleanOption(StandardSocketOption.SO_REUSEADDR, on);
+        setBooleanOption(StandardSocketOptions.SO_REUSEADDR, on);
     }
 
     public boolean getReuseAddress() throws SocketException {
-        return getBooleanOption(StandardSocketOption.SO_REUSEADDR);
+        return getBooleanOption(StandardSocketOptions.SO_REUSEADDR);
     }
 
     public void close() throws IOException {
--- a/src/share/classes/sun/nio/ch/SocketChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/ch/SocketChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -170,7 +170,7 @@
                 throw new ClosedChannelException();
 
             // special handling for IP_TOS: no-op when IPv6
-            if (name == StandardSocketOption.IP_TOS) {
+            if (name == StandardSocketOptions.IP_TOS) {
                 if (!Net.isIPv6Available())
                     Net.setSocketOption(fd, StandardProtocolFamily.INET, name, value);
                 return this;
@@ -197,7 +197,7 @@
                 throw new ClosedChannelException();
 
             // special handling for IP_TOS: always return 0 when IPv6
-            if (name == StandardSocketOption.IP_TOS) {
+            if (name == StandardSocketOptions.IP_TOS) {
                 return (Net.isIPv6Available()) ? (T) Integer.valueOf(0) :
                     (T) Net.getSocketOption(fd, StandardProtocolFamily.INET, name);
             }
@@ -212,14 +212,14 @@
 
         private static Set<SocketOption<?>> defaultOptions() {
             HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(8);
-            set.add(StandardSocketOption.SO_SNDBUF);
-            set.add(StandardSocketOption.SO_RCVBUF);
-            set.add(StandardSocketOption.SO_KEEPALIVE);
-            set.add(StandardSocketOption.SO_REUSEADDR);
-            set.add(StandardSocketOption.SO_LINGER);
-            set.add(StandardSocketOption.TCP_NODELAY);
+            set.add(StandardSocketOptions.SO_SNDBUF);
+            set.add(StandardSocketOptions.SO_RCVBUF);
+            set.add(StandardSocketOptions.SO_KEEPALIVE);
+            set.add(StandardSocketOptions.SO_REUSEADDR);
+            set.add(StandardSocketOptions.SO_LINGER);
+            set.add(StandardSocketOptions.TCP_NODELAY);
             // additional options required by socket adaptor
-            set.add(StandardSocketOption.IP_TOS);
+            set.add(StandardSocketOptions.IP_TOS);
             set.add(ExtendedSocketOption.SO_OOBINLINE);
             return Collections.unmodifiableSet(set);
         }
--- a/src/share/classes/sun/nio/fs/AbstractPoller.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/fs/AbstractPoller.java	Mon May 09 18:45:33 2011 +0100
@@ -105,16 +105,16 @@
         Set<WatchEvent.Kind<?>> eventSet = new HashSet<>(events.length);
         for (WatchEvent.Kind<?> event: events) {
             // standard events
-            if (event == StandardWatchEventKind.ENTRY_CREATE ||
-                event == StandardWatchEventKind.ENTRY_MODIFY ||
-                event == StandardWatchEventKind.ENTRY_DELETE)
+            if (event == StandardWatchEventKinds.ENTRY_CREATE ||
+                event == StandardWatchEventKinds.ENTRY_MODIFY ||
+                event == StandardWatchEventKinds.ENTRY_DELETE)
             {
                 eventSet.add(event);
                 continue;
             }
 
             // OVERFLOW is ignored
-            if (event == StandardWatchEventKind.OVERFLOW) {
+            if (event == StandardWatchEventKinds.OVERFLOW) {
                 if (events.length == 1)
                     throw new IllegalArgumentException("No events to register");
                 continue;
--- a/src/share/classes/sun/nio/fs/AbstractWatchKey.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/fs/AbstractWatchKey.java	Mon May 09 18:45:33 2011 +0100
@@ -42,8 +42,8 @@
     /**
      * Special event to signal overflow
      */
-    static final Event<Void> OVERFLOW_EVENT =
-        new Event<Void>(StandardWatchEventKind.OVERFLOW, null);
+    static final Event<Object> OVERFLOW_EVENT =
+        new Event<Object>(StandardWatchEventKinds.OVERFLOW, null);
 
     /**
      * Possible key states
@@ -103,14 +103,14 @@
      */
     @SuppressWarnings("unchecked")
     final void signalEvent(WatchEvent.Kind<?> kind, Object context) {
-        boolean isModify = (kind == StandardWatchEventKind.ENTRY_MODIFY);
+        boolean isModify = (kind == StandardWatchEventKinds.ENTRY_MODIFY);
         synchronized (this) {
             int size = events.size();
             if (size > 0) {
                 // if the previous event is an OVERFLOW event or this is a
                 // repeated event then we simply increment the counter
                 WatchEvent<?> prev = events.get(size-1);
-                if ((prev.kind() == StandardWatchEventKind.OVERFLOW) ||
+                if ((prev.kind() == StandardWatchEventKinds.OVERFLOW) ||
                     ((kind == prev.kind() &&
                      Objects.equals(context, prev.context()))))
                 {
@@ -124,7 +124,7 @@
                     if (isModify) {
                         WatchEvent<?> ev = lastModifyEvents.get(context);
                         if (ev != null) {
-                            assert ev.kind() == StandardWatchEventKind.ENTRY_MODIFY;
+                            assert ev.kind() == StandardWatchEventKinds.ENTRY_MODIFY;
                             ((Event<?>)ev).increment();
                             return;
                         }
@@ -138,7 +138,7 @@
                 // if the list has reached the limit then drop pending events
                 // and queue an OVERFLOW event
                 if (size >= MAX_EVENT_LIST_SIZE) {
-                    kind = StandardWatchEventKind.OVERFLOW;
+                    kind = StandardWatchEventKinds.OVERFLOW;
                     isModify = false;
                     context = null;
                 }
@@ -149,7 +149,7 @@
                 new Event<Object>((WatchEvent.Kind<Object>)kind, context);
             if (isModify) {
                 lastModifyEvents.put(context, ev);
-            } else if (kind == StandardWatchEventKind.OVERFLOW) {
+            } else if (kind == StandardWatchEventKinds.OVERFLOW) {
                 // drop all pending events
                 events.clear();
                 lastModifyEvents.clear();
--- a/src/share/classes/sun/nio/fs/PollingWatchService.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/classes/sun/nio/fs/PollingWatchService.java	Mon May 09 18:45:33 2011 +0100
@@ -80,16 +80,16 @@
             new HashSet<WatchEvent.Kind<?>>(events.length);
         for (WatchEvent.Kind<?> event: events) {
             // standard events
-            if (event == StandardWatchEventKind.ENTRY_CREATE ||
-                event == StandardWatchEventKind.ENTRY_MODIFY ||
-                event == StandardWatchEventKind.ENTRY_DELETE)
+            if (event == StandardWatchEventKinds.ENTRY_CREATE ||
+                event == StandardWatchEventKinds.ENTRY_MODIFY ||
+                event == StandardWatchEventKinds.ENTRY_DELETE)
             {
                 eventSet.add(event);
                 continue;
             }
 
             // OVERFLOW is ignored
-            if (event == StandardWatchEventKind.OVERFLOW) {
+            if (event == StandardWatchEventKinds.OVERFLOW) {
                 if (events.length == 1)
                     throw new IllegalArgumentException("No events to register");
                 continue;
@@ -355,16 +355,16 @@
                                      new CacheEntry(lastModified, tickCount));
 
                         // queue ENTRY_CREATE if event enabled
-                        if (events.contains(StandardWatchEventKind.ENTRY_CREATE)) {
-                            signalEvent(StandardWatchEventKind.ENTRY_CREATE, entry.getFileName());
+                        if (events.contains(StandardWatchEventKinds.ENTRY_CREATE)) {
+                            signalEvent(StandardWatchEventKinds.ENTRY_CREATE, entry.getFileName());
                             continue;
                         } else {
                             // if ENTRY_CREATE is not enabled and ENTRY_MODIFY is
                             // enabled then queue event to avoid missing out on
                             // modifications to the file immediately after it is
                             // created.
-                            if (events.contains(StandardWatchEventKind.ENTRY_MODIFY)) {
-                                signalEvent(StandardWatchEventKind.ENTRY_MODIFY, entry.getFileName());
+                            if (events.contains(StandardWatchEventKinds.ENTRY_MODIFY)) {
+                                signalEvent(StandardWatchEventKinds.ENTRY_MODIFY, entry.getFileName());
                             }
                         }
                         continue;
@@ -372,8 +372,8 @@
 
                     // check if file has changed
                     if (e.lastModified != lastModified) {
-                        if (events.contains(StandardWatchEventKind.ENTRY_MODIFY)) {
-                            signalEvent(StandardWatchEventKind.ENTRY_MODIFY,
+                        if (events.contains(StandardWatchEventKinds.ENTRY_MODIFY)) {
+                            signalEvent(StandardWatchEventKinds.ENTRY_MODIFY,
                                         entry.getFileName());
                         }
                     }
@@ -403,8 +403,8 @@
                     Path name = mapEntry.getKey();
                     // remove from map and queue delete event (if enabled)
                     i.remove();
-                    if (events.contains(StandardWatchEventKind.ENTRY_DELETE)) {
-                        signalEvent(StandardWatchEventKind.ENTRY_DELETE, name);
+                    if (events.contains(StandardWatchEventKinds.ENTRY_DELETE)) {
+                        signalEvent(StandardWatchEventKinds.ENTRY_DELETE, name);
                     }
                 }
             }
--- a/src/share/native/sun/nio/ch/genSocketOptionRegistry.c	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/native/sun/nio/ch/genSocketOptionRegistry.c	Mon May 09 18:45:33 2011 +0100
@@ -63,7 +63,7 @@
     out("// AUTOMATICALLY GENERATED FILE - DO NOT EDIT                                  ");
     out("package sun.nio.ch;                                                            ");
     out("import java.net.SocketOption;                                                  ");
-    out("import java.net.StandardSocketOption;                                          ");
+    out("import java.net.StandardSocketOptions;                                         ");
     out("import java.net.ProtocolFamily;                                                ");
     out("import java.net.StandardProtocolFamily;                                        ");
     out("import java.util.Map;                                                          ");
@@ -73,7 +73,7 @@
     out("    private static class RegistryKey {                                         ");
     out("        private final SocketOption<?> name;                                    ");
     out("        private final ProtocolFamily family;                                   ");
-    out("        RegistryKey(SocketOption<?> name, ProtocolFamily family) {                ");
+    out("        RegistryKey(SocketOption<?> name, ProtocolFamily family) {             ");
     out("            this.name = name;                                                  ");
     out("            this.family = family;                                              ");
     out("        }                                                                      ");
@@ -95,23 +95,23 @@
     out("            Map<RegistryKey,OptionKey> map =                                   ");
     out("                new HashMap<RegistryKey,OptionKey>();                          ");
 
-    emit_unspec("StandardSocketOption.SO_BROADCAST", SOL_SOCKET, SO_BROADCAST);
-    emit_unspec("StandardSocketOption.SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE);
-    emit_unspec("StandardSocketOption.SO_LINGER",    SOL_SOCKET, SO_LINGER);
-    emit_unspec("StandardSocketOption.SO_SNDBUF",    SOL_SOCKET, SO_SNDBUF);
-    emit_unspec("StandardSocketOption.SO_RCVBUF",    SOL_SOCKET, SO_RCVBUF);
-    emit_unspec("StandardSocketOption.SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR);
-    emit_unspec("StandardSocketOption.TCP_NODELAY",  IPPROTO_TCP, TCP_NODELAY);
+    emit_unspec("StandardSocketOptions.SO_BROADCAST", SOL_SOCKET, SO_BROADCAST);
+    emit_unspec("StandardSocketOptions.SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE);
+    emit_unspec("StandardSocketOptions.SO_LINGER",    SOL_SOCKET, SO_LINGER);
+    emit_unspec("StandardSocketOptions.SO_SNDBUF",    SOL_SOCKET, SO_SNDBUF);
+    emit_unspec("StandardSocketOptions.SO_RCVBUF",    SOL_SOCKET, SO_RCVBUF);
+    emit_unspec("StandardSocketOptions.SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR);
+    emit_unspec("StandardSocketOptions.TCP_NODELAY",  IPPROTO_TCP, TCP_NODELAY);
 
-    emit_inet("StandardSocketOption.IP_TOS",            IPPROTO_IP,     IP_TOS);
-    emit_inet("StandardSocketOption.IP_MULTICAST_IF",   IPPROTO_IP,     IP_MULTICAST_IF);
-    emit_inet("StandardSocketOption.IP_MULTICAST_TTL",  IPPROTO_IP,     IP_MULTICAST_TTL);
-    emit_inet("StandardSocketOption.IP_MULTICAST_LOOP", IPPROTO_IP,     IP_MULTICAST_LOOP);
+    emit_inet("StandardSocketOptions.IP_TOS",            IPPROTO_IP,     IP_TOS);
+    emit_inet("StandardSocketOptions.IP_MULTICAST_IF",   IPPROTO_IP,     IP_MULTICAST_IF);
+    emit_inet("StandardSocketOptions.IP_MULTICAST_TTL",  IPPROTO_IP,     IP_MULTICAST_TTL);
+    emit_inet("StandardSocketOptions.IP_MULTICAST_LOOP", IPPROTO_IP,     IP_MULTICAST_LOOP);
 
 #ifdef AF_INET6
-    emit_inet6("StandardSocketOption.IP_MULTICAST_IF",   IPPROTO_IPV6,  IPV6_MULTICAST_IF);
-    emit_inet6("StandardSocketOption.IP_MULTICAST_TTL",  IPPROTO_IPV6,  IPV6_MULTICAST_HOPS);
-    emit_inet6("StandardSocketOption.IP_MULTICAST_LOOP", IPPROTO_IPV6,  IPV6_MULTICAST_LOOP);
+    emit_inet6("StandardSocketOptions.IP_MULTICAST_IF",   IPPROTO_IPV6,  IPV6_MULTICAST_IF);
+    emit_inet6("StandardSocketOptions.IP_MULTICAST_TTL",  IPPROTO_IPV6,  IPV6_MULTICAST_HOPS);
+    emit_inet6("StandardSocketOptions.IP_MULTICAST_LOOP", IPPROTO_IPV6,  IPV6_MULTICAST_LOOP);
 #endif
 
     emit_unspec("ExtendedSocketOption.SO_OOBINLINE", SOL_SOCKET, SO_OOBINLINE);
--- a/src/share/sample/nio/chatserver/ChatServer.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/sample/nio/chatserver/ChatServer.java	Mon May 09 18:45:33 2011 +0100
@@ -32,7 +32,7 @@
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
-import java.net.StandardSocketOption;
+import java.net.StandardSocketOptions;
 import java.nio.channels.*;
 import java.util.*;
 import java.util.concurrent.Executors;
@@ -105,7 +105,7 @@
     */
     private AsynchronousServerSocketChannel createListener(AsynchronousChannelGroup channelGroup) throws IOException {
         final AsynchronousServerSocketChannel listener = openChannel(channelGroup);
-        listener.setOption(StandardSocketOption.SO_REUSEADDR, true);
+        listener.setOption(StandardSocketOptions.SO_REUSEADDR, true);
         listener.bind(new InetSocketAddress(port));
         return listener;
     }
@@ -123,7 +123,7 @@
     private void handleNewConnection(AsynchronousSocketChannel channel) {
         Client client = new Client(channel, new ClientReader(this, new NameReader(this)));
         try {
-            channel.setOption(StandardSocketOption.TCP_NODELAY, true);
+            channel.setOption(StandardSocketOptions.TCP_NODELAY, true);
         } catch (IOException e) {
             // ignore
         }
--- a/src/share/sample/nio/file/WatchDir.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/sample/nio/file/WatchDir.java	Mon May 09 18:45:33 2011 +0100
@@ -30,7 +30,7 @@
  */
 
 import java.nio.file.*;
-import static java.nio.file.StandardWatchEventKind.*;
+import static java.nio.file.StandardWatchEventKinds.*;
 import static java.nio.file.LinkOption.*;
 import java.nio.file.attribute.*;
 import java.io.IOException;
--- a/src/share/sample/nio/multicast/Reader.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/sample/nio/multicast/Reader.java	Mon May 09 18:45:33 2011 +0100
@@ -96,7 +96,7 @@
             family = StandardProtocolFamily.INET6;
         }
         DatagramChannel dc = DatagramChannel.open(family)
-            .setOption(StandardSocketOption.SO_REUSEADDR, true)
+            .setOption(StandardSocketOptions.SO_REUSEADDR, true)
             .bind(new InetSocketAddress(target.port()));
 
         if (includeList.isEmpty()) {
--- a/src/share/sample/nio/multicast/Sender.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/share/sample/nio/multicast/Sender.java	Mon May 09 18:45:33 2011 +0100
@@ -59,7 +59,7 @@
             family = StandardProtocolFamily.INET6;
         DatagramChannel dc = DatagramChannel.open(family).bind(new InetSocketAddress(0));
         if (target.interf() != null) {
-            dc.setOption(StandardSocketOption.IP_MULTICAST_IF, target.interf());
+            dc.setOption(StandardSocketOptions.IP_MULTICAST_IF, target.interf());
         }
 
         // send multicast packet
--- a/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -55,7 +55,7 @@
 import com.sun.nio.sctp.SctpSocketOption;
 import sun.nio.ch.PollArrayWrapper;
 import sun.nio.ch.SelChImpl;
-import static com.sun.nio.sctp.SctpStandardSocketOption.*;
+import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
 import static sun.nio.ch.SctpResultContainer.SEND_FAILED;
 import static sun.nio.ch.SctpResultContainer.ASSOCIATION_CHANGED;
 import static sun.nio.ch.SctpResultContainer.PEER_ADDRESS_CHANGED;
--- a/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -53,7 +53,7 @@
 import com.sun.nio.sctp.SctpChannel;
 import com.sun.nio.sctp.SctpMultiChannel;
 import com.sun.nio.sctp.SctpSocketOption;
-import static com.sun.nio.sctp.SctpStandardSocketOption.*;
+import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
 import static sun.nio.ch.SctpResultContainer.*;
 
 /**
--- a/src/solaris/classes/sun/nio/ch/SctpNet.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/solaris/classes/sun/nio/ch/SctpNet.java	Mon May 09 18:45:33 2011 +0100
@@ -35,7 +35,7 @@
 import java.security.AccessController;
 import sun.security.action.GetPropertyAction;
 import com.sun.nio.sctp.SctpSocketOption;
-import static com.sun.nio.sctp.SctpStandardSocketOption.*;
+import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
 
 public class SctpNet {
     static final String osName = AccessController.doPrivileged(
--- a/src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java	Mon May 09 18:45:33 2011 +0100
@@ -40,7 +40,7 @@
 import com.sun.nio.sctp.SctpChannel;
 import com.sun.nio.sctp.SctpServerChannel;
 import com.sun.nio.sctp.SctpSocketOption;
-import com.sun.nio.sctp.SctpStandardSocketOption;
+import com.sun.nio.sctp.SctpStandardSocketOptions;
 
 /**
  * An implementation of SctpServerChannel
@@ -386,7 +386,7 @@
 
         private static Set<SctpSocketOption<?>> defaultOptions() {
             HashSet<SctpSocketOption<?>> set = new HashSet<SctpSocketOption<?>>(1);
-            set.add(SctpStandardSocketOption.SCTP_INIT_MAXSTREAMS);
+            set.add(SctpStandardSocketOptions.SCTP_INIT_MAXSTREAMS);
             return Collections.unmodifiableSet(set);
         }
     }
--- a/src/solaris/classes/sun/nio/fs/LinuxWatchService.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/solaris/classes/sun/nio/fs/LinuxWatchService.java	Mon May 09 18:45:33 2011 +0100
@@ -210,15 +210,15 @@
 
             int mask = 0;
             for (WatchEvent.Kind<?> event: events) {
-                if (event == StandardWatchEventKind.ENTRY_CREATE) {
+                if (event == StandardWatchEventKinds.ENTRY_CREATE) {
                     mask |= IN_CREATE | IN_MOVED_TO;
                     continue;
                 }
-                if (event == StandardWatchEventKind.ENTRY_DELETE) {
+                if (event == StandardWatchEventKinds.ENTRY_DELETE) {
                     mask |= IN_DELETE | IN_MOVED_FROM;
                     continue;
                 }
-                if (event == StandardWatchEventKind.ENTRY_MODIFY) {
+                if (event == StandardWatchEventKinds.ENTRY_MODIFY) {
                     mask |= IN_MODIFY | IN_ATTRIB;
                     continue;
                 }
@@ -378,17 +378,17 @@
          */
         private WatchEvent.Kind<?> maskToEventKind(int mask) {
             if ((mask & IN_MODIFY) > 0)
-                return StandardWatchEventKind.ENTRY_MODIFY;
+                return StandardWatchEventKinds.ENTRY_MODIFY;
             if ((mask & IN_ATTRIB) > 0)
-                return StandardWatchEventKind.ENTRY_MODIFY;
+                return StandardWatchEventKinds.ENTRY_MODIFY;
             if ((mask & IN_CREATE) > 0)
-                return StandardWatchEventKind.ENTRY_CREATE;
+                return StandardWatchEventKinds.ENTRY_CREATE;
             if ((mask & IN_MOVED_TO) > 0)
-                return StandardWatchEventKind.ENTRY_CREATE;
+                return StandardWatchEventKinds.ENTRY_CREATE;
             if ((mask & IN_DELETE) > 0)
-                return StandardWatchEventKind.ENTRY_DELETE;
+                return StandardWatchEventKinds.ENTRY_DELETE;
             if ((mask & IN_MOVED_FROM) > 0)
-                return StandardWatchEventKind.ENTRY_DELETE;
+                return StandardWatchEventKinds.ENTRY_DELETE;
             return null;
         }
 
@@ -400,7 +400,7 @@
             if ((mask & IN_Q_OVERFLOW) > 0) {
                 for (Map.Entry<Integer,LinuxWatchKey> entry: wdToKey.entrySet()) {
                     entry.getValue()
-                        .signalEvent(StandardWatchEventKind.OVERFLOW, null);
+                        .signalEvent(StandardWatchEventKinds.OVERFLOW, null);
                 }
                 return;
             }
--- a/src/solaris/classes/sun/nio/fs/SolarisWatchService.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/solaris/classes/sun/nio/fs/SolarisWatchService.java	Mon May 09 18:45:33 2011 +0100
@@ -486,7 +486,7 @@
         void processDirectoryEvents(SolarisWatchKey key, int mask) {
             if ((mask & (FILE_MODIFIED | FILE_ATTRIB)) != 0) {
                 registerChildren(key.getDirectory(), key,
-                    key.events().contains(StandardWatchEventKind.ENTRY_CREATE));
+                    key.events().contains(StandardWatchEventKinds.ENTRY_CREATE));
             }
         }
 
@@ -504,14 +504,14 @@
 
             // entry modified
             if (((mask & (FILE_MODIFIED | FILE_ATTRIB)) != 0) &&
-                events.contains(StandardWatchEventKind.ENTRY_MODIFY))
+                events.contains(StandardWatchEventKinds.ENTRY_MODIFY))
             {
-                key.signalEvent(StandardWatchEventKind.ENTRY_MODIFY, node.name());
+                key.signalEvent(StandardWatchEventKinds.ENTRY_MODIFY, node.name());
             }
 
             // entry removed
             if (((mask & (FILE_REMOVED)) != 0) &&
-                events.contains(StandardWatchEventKind.ENTRY_DELETE))
+                events.contains(StandardWatchEventKinds.ENTRY_DELETE))
             {
                 // Due to 6636438/6636412 we may get a remove event for cases
                 // where a rmdir/unlink/rename is attempted but fails. Until
@@ -527,7 +527,7 @@
                 } catch (UnixException x) { }
 
                 if (removed)
-                    key.signalEvent(StandardWatchEventKind.ENTRY_DELETE, node.name());
+                    key.signalEvent(StandardWatchEventKinds.ENTRY_DELETE, node.name());
             }
             return false;
         }
@@ -547,7 +547,7 @@
             // if the ENTRY_MODIFY event is not enabled then we don't need
             // modification events for entries in the directory
             int events = FILE_NOFOLLOW;
-            if (parent.events().contains(StandardWatchEventKind.ENTRY_MODIFY))
+            if (parent.events().contains(StandardWatchEventKinds.ENTRY_MODIFY))
                 events |= (FILE_MODIFIED | FILE_ATTRIB);
 
             DirectoryStream<Path> stream = null;
@@ -567,7 +567,7 @@
 
                     // send ENTRY_CREATE if enabled
                     if (sendEvents) {
-                        parent.signalEvent(StandardWatchEventKind.ENTRY_CREATE, name);
+                        parent.signalEvent(StandardWatchEventKinds.ENTRY_CREATE, name);
                     }
 
                     // register it
@@ -602,12 +602,12 @@
             // update events, rembering if ENTRY_MODIFY was previously
             // enabled or disabled.
             boolean wasModifyEnabled = key.events()
-                .contains(StandardWatchEventKind.ENTRY_MODIFY);
+                .contains(StandardWatchEventKinds.ENTRY_MODIFY);
             key.setEvents(events);
 
             // check if ENTRY_MODIFY has changed
             boolean isModifyEnabled = events
-                .contains(StandardWatchEventKind.ENTRY_MODIFY);
+                .contains(StandardWatchEventKinds.ENTRY_MODIFY);
             if (wasModifyEnabled == isModifyEnabled) {
                 return;
             }
--- a/src/windows/classes/sun/nio/fs/WindowsWatchService.java	Mon May 09 08:58:00 2011 -0700
+++ b/src/windows/classes/sun/nio/fs/WindowsWatchService.java	Mon May 09 18:45:33 2011 +0100
@@ -464,15 +464,15 @@
         {
             switch (action) {
                 case FILE_ACTION_MODIFIED :
-                    return StandardWatchEventKind.ENTRY_MODIFY;
+                    return StandardWatchEventKinds.ENTRY_MODIFY;
 
                 case FILE_ACTION_ADDED :
                 case FILE_ACTION_RENAMED_NEW_NAME :
-                    return StandardWatchEventKind.ENTRY_CREATE;
+                    return StandardWatchEventKinds.ENTRY_CREATE;
 
                 case FILE_ACTION_REMOVED :
                 case FILE_ACTION_RENAMED_OLD_NAME :
-                    return StandardWatchEventKind.ENTRY_DELETE;
+                    return StandardWatchEventKinds.ENTRY_DELETE;
 
                 default :
                     return null;  // action not recognized
@@ -548,7 +548,7 @@
                 if (info.error() != 0) {
                     // buffer overflow
                     if (info.error() == ERROR_NOTIFY_ENUM_DIR) {
-                        key.signalEvent(StandardWatchEventKind.OVERFLOW, null);
+                        key.signalEvent(StandardWatchEventKinds.OVERFLOW, null);
                     } else {
                         // other error so cancel key
                         implCancelKey(key);
@@ -562,7 +562,7 @@
                     processEvents(key, info.bytesTransferred());
                 } else {
                     // insufficient buffer size
-                    key.signalEvent(StandardWatchEventKind.OVERFLOW, null);
+                    key.signalEvent(StandardWatchEventKinds.OVERFLOW, null);
                 }
 
                 // start read for next batch of changes
--- a/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java	Mon May 09 18:45:33 2011 +0100
@@ -40,7 +40,7 @@
 import com.sun.nio.sctp.SctpSocketOption;
 import java.security.AccessController;
 import sun.security.action.GetPropertyAction;
-import static com.sun.nio.sctp.SctpStandardSocketOption.*;
+import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
 import static java.lang.System.out;
 
 public class SocketOptionTests {
--- a/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/com/sun/nio/sctp/SctpMultiChannel/SocketOptionTests.java	Mon May 09 18:45:33 2011 +0100
@@ -48,7 +48,7 @@
 import com.sun.nio.sctp.SctpSocketOption;
 import java.security.AccessController;
 import sun.security.action.GetPropertyAction;
-import static com.sun.nio.sctp.SctpStandardSocketOption.*;
+import static com.sun.nio.sctp.SctpStandardSocketOptions.*;
 import static java.lang.System.out;
 
 public class SocketOptionTests {
--- a/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/AsynchronousServerSocketChannel/Basic.java	Mon May 09 18:45:33 2011 +0100
@@ -29,7 +29,7 @@
 
 import java.nio.channels.*;
 import java.net.*;
-import static java.net.StandardSocketOption.*;
+import static java.net.StandardSocketOptions.*;
 import java.io.IOException;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
--- a/test/java/nio/channels/AsynchronousSocketChannel/Basic.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/AsynchronousSocketChannel/Basic.java	Mon May 09 18:45:33 2011 +0100
@@ -29,7 +29,7 @@
 
 import java.nio.ByteBuffer;
 import java.nio.channels.*;
-import static java.net.StandardSocketOption.*;
+import static java.net.StandardSocketOptions.*;
 import java.net.*;
 import java.util.Random;
 import java.util.concurrent.*;
@@ -383,7 +383,7 @@
         // write bytes and close connection
         SocketChannel sc = server.accept();
         ByteBuffer src = genBuffer();
-        sc.setOption(StandardSocketOption.SO_SNDBUF, src.remaining());
+        sc.setOption(StandardSocketOptions.SO_SNDBUF, src.remaining());
         while (src.hasRemaining())
             sc.write(src);
         sc.close();
--- a/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/DatagramChannel/BasicMulticastTests.java	Mon May 09 18:45:33 2011 +0100
@@ -52,7 +52,7 @@
             StandardProtocolFamily.INET : StandardProtocolFamily.INET6;
 
         DatagramChannel dc = DatagramChannel.open(family)
-            .setOption(StandardSocketOption.SO_REUSEADDR, true)
+            .setOption(StandardSocketOptions.SO_REUSEADDR, true)
             .bind(new InetSocketAddress(source, 0));
 
         // check existing key is returned
@@ -115,7 +115,7 @@
         System.out.println("Exception Tests");
 
         DatagramChannel dc = DatagramChannel.open(StandardProtocolFamily.INET)
-            .setOption(StandardSocketOption.SO_REUSEADDR, true)
+            .setOption(StandardSocketOptions.SO_REUSEADDR, true)
             .bind(new InetSocketAddress(0));
 
         InetAddress group = InetAddress.getByName("225.4.5.6");
--- a/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java	Mon May 09 18:45:33 2011 +0100
@@ -59,7 +59,7 @@
             StandardProtocolFamily.INET6 : StandardProtocolFamily.INET;
         DatagramChannel dc = DatagramChannel.open(family)
             .bind(new InetSocketAddress(local, 0))
-            .setOption(StandardSocketOption.IP_MULTICAST_IF, nif);
+            .setOption(StandardSocketOptions.IP_MULTICAST_IF, nif);
         int id = rand.nextInt();
         byte[] msg = Integer.toString(id).getBytes("UTF-8");
         ByteBuffer buf = ByteBuffer.wrap(msg);
@@ -146,7 +146,7 @@
         System.out.format("\nTest DatagramChannel to %s socket\n", family.name());
         try (DatagramChannel dc = (family == UNSPEC) ?
                 DatagramChannel.open() : DatagramChannel.open(family)) {
-            dc.setOption(StandardSocketOption.SO_REUSEADDR, true)
+            dc.setOption(StandardSocketOptions.SO_REUSEADDR, true)
               .bind(new InetSocketAddress(0));
 
             // join group
--- a/test/java/nio/channels/DatagramChannel/SocketOptionTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/DatagramChannel/SocketOptionTests.java	Mon May 09 18:45:33 2011 +0100
@@ -31,7 +31,7 @@
 import java.net.*;
 import java.io.IOException;
 import java.util.*;
-import static java.net.StandardSocketOption.*;
+import static java.net.StandardSocketOptions.*;
 
 public class SocketOptionTests {
 
--- a/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/ServerSocketChannel/SocketOptionTests.java	Mon May 09 18:45:33 2011 +0100
@@ -32,7 +32,7 @@
 import java.net.*;
 import java.io.IOException;
 import java.util.*;
-import static java.net.StandardSocketOption.*;
+import static java.net.StandardSocketOptions.*;
 
 public class SocketOptionTests {
 
--- a/test/java/nio/channels/SocketChannel/Shutdown.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/SocketChannel/Shutdown.java	Mon May 09 18:45:33 2011 +0100
@@ -39,7 +39,7 @@
     static void acceptAndReset(ServerSocketChannel ssc) throws IOException {
         SocketChannel peer = ssc.accept();
         try {
-            peer.setOption(StandardSocketOption.SO_LINGER, 0);
+            peer.setOption(StandardSocketOptions.SO_LINGER, 0);
             peer.configureBlocking(false);
             peer.write(ByteBuffer.wrap(new byte[128*1024]));
         } finally {
--- a/test/java/nio/channels/SocketChannel/SocketOptionTests.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/channels/SocketChannel/SocketOptionTests.java	Mon May 09 18:45:33 2011 +0100
@@ -32,7 +32,7 @@
 import java.net.*;
 import java.io.IOException;
 import java.util.*;
-import static java.net.StandardSocketOption.*;
+import static java.net.StandardSocketOptions.*;
 
 public class SocketOptionTests {
 
--- a/test/java/nio/file/Files/CheckPermissions.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/file/Files/CheckPermissions.java	Mon May 09 18:45:33 2011 +0100
@@ -540,7 +540,7 @@
 
             try (WatchService watcher = FileSystems.getDefault().newWatchService()) {
                 prepare();
-                testdir.register(watcher, StandardWatchEventKind.ENTRY_DELETE);
+                testdir.register(watcher, StandardWatchEventKinds.ENTRY_DELETE);
                 assertCheckRead(testdir);
             }
 
--- a/test/java/nio/file/WatchService/Basic.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/file/WatchService/Basic.java	Mon May 09 18:45:33 2011 +0100
@@ -29,7 +29,7 @@
  */
 
 import java.nio.file.*;
-import static java.nio.file.StandardWatchEventKind.*;
+import static java.nio.file.StandardWatchEventKinds.*;
 import java.nio.file.attribute.*;
 import java.io.*;
 import java.util.*;
@@ -100,7 +100,7 @@
             // remove key and check that we got the ENTRY_CREATE event
             takeExpectedKey(watcher, myKey);
             checkExpectedEvent(myKey.pollEvents(),
-                StandardWatchEventKind.ENTRY_CREATE, name);
+                StandardWatchEventKinds.ENTRY_CREATE, name);
 
             System.out.println("reset key");
             if (!myKey.reset())
@@ -121,7 +121,7 @@
             Files.delete(file);
             takeExpectedKey(watcher, myKey);
             checkExpectedEvent(myKey.pollEvents(),
-                StandardWatchEventKind.ENTRY_DELETE, name);
+                StandardWatchEventKinds.ENTRY_DELETE, name);
 
             System.out.println("reset key");
             if (!myKey.reset())
@@ -149,7 +149,7 @@
             // remove key and check that we got the ENTRY_MODIFY event
             takeExpectedKey(watcher, myKey);
             checkExpectedEvent(myKey.pollEvents(),
-                StandardWatchEventKind.ENTRY_MODIFY, name);
+                StandardWatchEventKinds.ENTRY_MODIFY, name);
             System.out.println("OKAY");
 
             // done
@@ -424,7 +424,7 @@
             // check that key1 got ENTRY_CREATE
             takeExpectedKey(watcher1, key1);
             checkExpectedEvent(key1.pollEvents(),
-                StandardWatchEventKind.ENTRY_CREATE, name2);
+                StandardWatchEventKinds.ENTRY_CREATE, name2);
 
             // check that key2 got zero events
             WatchKey key = watcher2.poll();
@@ -437,7 +437,7 @@
             // check that key2 got ENTRY_DELETE
             takeExpectedKey(watcher2, key2);
             checkExpectedEvent(key2.pollEvents(),
-                StandardWatchEventKind.ENTRY_DELETE, name1);
+                StandardWatchEventKinds.ENTRY_DELETE, name1);
 
             // check that key1 got zero events
             key = watcher1.poll();
@@ -458,7 +458,7 @@
             Files.createFile(file1);
             takeExpectedKey(watcher2, key2);
             checkExpectedEvent(key2.pollEvents(),
-                StandardWatchEventKind.ENTRY_CREATE, name1);
+                StandardWatchEventKinds.ENTRY_CREATE, name1);
 
             System.out.println("OKAY");
 
--- a/test/java/nio/file/WatchService/FileTreeModifier.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/file/WatchService/FileTreeModifier.java	Mon May 09 18:45:33 2011 +0100
@@ -28,7 +28,7 @@
  */
 
 import java.nio.file.*;
-import static java.nio.file.StandardWatchEventKind.*;
+import static java.nio.file.StandardWatchEventKinds.*;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.*;
--- a/test/java/nio/file/WatchService/LotsOfEvents.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/file/WatchService/LotsOfEvents.java	Mon May 09 18:45:33 2011 +0100
@@ -29,7 +29,7 @@
  */
 
 import java.nio.file.*;
-import static java.nio.file.StandardWatchEventKind.*;
+import static java.nio.file.StandardWatchEventKinds.*;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.*;
--- a/test/java/nio/file/WatchService/SensitivityModifier.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/file/WatchService/SensitivityModifier.java	Mon May 09 18:45:33 2011 +0100
@@ -29,7 +29,7 @@
  */
 
 import java.nio.file.*;
-import static java.nio.file.StandardWatchEventKind.*;
+import static java.nio.file.StandardWatchEventKinds.*;
 import java.io.OutputStream;
 import java.io.IOException;
 import java.util.Random;
--- a/test/java/nio/file/WatchService/WithSecurityManager.java	Mon May 09 08:58:00 2011 -0700
+++ b/test/java/nio/file/WatchService/WithSecurityManager.java	Mon May 09 18:45:33 2011 +0100
@@ -66,7 +66,7 @@
         // attempt to register directory
         try {
             dir.register(dir.getFileSystem().newWatchService(),
-                         new WatchEvent.Kind<?>[]{ StandardWatchEventKind.ENTRY_CREATE },
+                         new WatchEvent.Kind<?>[]{ StandardWatchEventKinds.ENTRY_CREATE },
                          modifiers);
             if (expectedToFail)
                 throw new RuntimeException("SecurityException not thrown");