src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java
changeset 59200 a686b67a59d9
parent 55693 9a97b1393e72
child 59224 55fdee124e89
--- a/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Thu Nov 21 11:31:58 2019 +0000
+++ b/src/java.base/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Wed Nov 20 10:13:10 2019 +0000
@@ -54,6 +54,7 @@
     private int trafficClass = 0;
     protected InetAddress connectedAddress = null;
     private int connectedPort = -1;
+    private final boolean isMulticast;
 
     private static final String os =
             GetPropertyAction.privilegedGetProperty("os.name");
@@ -84,6 +85,10 @@
         return isReusePortAvailable;
     }
 
+    AbstractPlainDatagramSocketImpl(boolean isMulticast) {
+        this.isMulticast = isMulticast;
+    }
+
     /**
      * Creates a datagram socket
      */
@@ -406,6 +411,7 @@
         options.add(StandardSocketOptions.SO_SNDBUF);
         options.add(StandardSocketOptions.SO_RCVBUF);
         options.add(StandardSocketOptions.SO_REUSEADDR);
+        options.add(StandardSocketOptions.SO_BROADCAST);
         options.add(StandardSocketOptions.IP_TOS);
         if (isReusePortAvailable())
             options.add(StandardSocketOptions.SO_REUSEPORT);
@@ -418,6 +424,7 @@
         options.add(StandardSocketOptions.SO_SNDBUF);
         options.add(StandardSocketOptions.SO_RCVBUF);
         options.add(StandardSocketOptions.SO_REUSEADDR);
+        options.add(StandardSocketOptions.SO_BROADCAST);
         options.add(StandardSocketOptions.IP_TOS);
         options.add(StandardSocketOptions.IP_MULTICAST_IF);
         options.add(StandardSocketOptions.IP_MULTICAST_TTL);
@@ -430,7 +437,7 @@
 
     @Override
     protected Set<SocketOption<?>> supportedOptions() {
-        if (getDatagramSocket() instanceof MulticastSocket)
+        if (isMulticast)
             return multicastSocketOptions;
         else
             return datagramSocketOptions;
@@ -460,6 +467,8 @@
             setOption(SocketOptions.SO_REUSEADDR, value);
         } else if (name == StandardSocketOptions.SO_REUSEPORT) {
             setOption(SocketOptions.SO_REUSEPORT, value);
+        } else if (name == StandardSocketOptions.SO_BROADCAST) {
+            setOption(SocketOptions.SO_BROADCAST, value);
         } else if (name == StandardSocketOptions.IP_TOS) {
             int i = ((Integer)value).intValue();
             if (i < 0 || i > 255)
@@ -499,6 +508,8 @@
             return (T) getOption(SocketOptions.SO_REUSEADDR);
         } else if (name == StandardSocketOptions.SO_REUSEPORT) {
             return (T) getOption(SocketOptions.SO_REUSEPORT);
+        } else if (name == StandardSocketOptions.SO_BROADCAST) {
+            return (T) getOption(SocketOptions.SO_BROADCAST);
         } else if (name == StandardSocketOptions.IP_TOS) {
             return (T) getOption(SocketOptions.IP_TOS);
         } else if (name == StandardSocketOptions.IP_MULTICAST_IF) {