src/share/classes/java/net/DatagramSocket.java
Print this page
rev 9687 : * * *
@@ -27,10 +27,12 @@
import java.io.IOException;
import java.nio.channels.DatagramChannel;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
+import java.util.Set;
+import java.util.Collections;
/**
* This class represents a socket for sending and receiving datagram packets.
*
* <p>A datagram socket is the sending or receiving point for a packet
@@ -313,10 +315,11 @@
checkOldImpl();
}
}
// creates a udp socket
impl.create();
+ impl.setDatagramSocket(this);
created = true;
}
/**
* Get the {@code DatagramSocketImpl} attached to this socket,
@@ -1256,6 +1259,98 @@
if (security != null) {
security.checkSetFactory();
}
factory = fac;
}
+
+ /**
+ * Sets the value of a socket option.
+ *
+ * @param name The socket option
+ * @param value The value of the socket option. A value of {@code null}
+ * may be valid for some options.
+ *
+ * @return this DatagramSocket
+ *
+ * @throws UnsupportedOperationException if the datagram socket
+ * does not support the option.
+ *
+ * @throws IllegalArgumentException if the value is not valid for
+ * the option.
+ *
+ * @throws IOException if an I/O error occurs, or if the socket is closed.
+ *
+ * @throws SecurityException if a security manager is set and if the socket
+ * option requires a security permission and if the caller does
+ * not have the required permission.
+ * {@link java.net.StandardSocketOptions StandardSocketOptions}
+ * do not require any security permission.
+ *
+ * @throws NullPointerException if name is {@code null}
+ *
+ * @since 1.9
+ */
+ public <T> DatagramSocket setOption(SocketOption<T> name, T value)
+ throws IOException
+ {
+ getImpl().setOption(name, value);
+ return this;
+ }
+
+ /**
+ * Returns the value of a socket option.
+ *
+ * @param name The socket option
+ *
+ * @return The value of the socket option.
+ *
+ * @throws UnsupportedOperationException if the datagram socket
+ * does not support the option.
+ *
+ * @throws IOException if an I/O error occurs, or if the socket is closed.
+ *
+ * @throws NullPointerException if name is {@code null}
+ *
+ * @throws SecurityException if a security manager is set and if the socket
+ * option requires a security permission and if the caller does
+ * not have the required permission.
+ * {@link java.net.StandardSocketOptions StandardSocketOptions}
+ * do not require any security permission.
+ *
+ * @since 1.9
+ */
+ public <T> T getOption(SocketOption<T> name) throws IOException
+ {
+ return getImpl().getOption(name);
+ }
+
+ private static Set<SocketOption<?>> options;
+ private static boolean optionsSet = false;
+
+ /**
+ * Returns a set of the socket options supported by this socket.
+ *
+ * This method will continue to return the set of options even after
+ * the socket has been closed.
+ *
+ * @return A set of the socket options supported by this socket. This set
+ * may be empty if the socket's DatagramSocketImpl cannot be created.
+ *
+ * @since 1.9
+ */
+ public Set<SocketOption<?>> supportedOptions()
+ {
+ synchronized(DatagramSocket.class) {
+ if (optionsSet) {
+ return options;
+ }
+ try {
+ DatagramSocketImpl impl = getImpl();
+ options = Collections.unmodifiableSet(impl.supportedOptions());
+ } catch (IOException e) {
+ options = Collections.emptySet();
+ }
+ optionsSet = true;
+ return options;
+ }
+ }
}