diff --git a/src/solaris/native/java/net/ExtendedOptionsImpl.c b/src/solaris/native/java/net/ExtendedOptionsImpl.c index 145d16685ea8eee19f8d2151bb94d0619ef83003..8b43e3de580fe7c62f04b8210f8c1b01ec9409e4 100644 --- a/src/solaris/native/java/net/ExtendedOptionsImpl.c +++ b/src/solaris/native/java/net/ExtendedOptionsImpl.c @@ -215,6 +215,9 @@ JNIEXPORT void JNICALL Java_sun_net_ExtendedOptionsImpl_setFlowOption if (errno == ENOPROTOOPT) { JNU_ThrowByName(env, "java/lang/UnsupportedOperationException", "unsupported socket option"); + } else if (errno == EACCES || errno == EPERM) { + NET_ERROR(env, JNU_JAVANETPKG "SocketException", + "Permission denied"); } else { NET_ERROR(env, JNU_JAVANETPKG "SocketException", "set option SO_FLOW_SLA failed"); @@ -247,6 +250,9 @@ JNIEXPORT void JNICALL Java_sun_net_ExtendedOptionsImpl_getFlowOption if (errno == ENOPROTOOPT) { JNU_ThrowByName(env, "java/lang/UnsupportedOperationException", "unsupported socket option"); + } else if (errno == EACCES || errno == EPERM) { + NET_ERROR(env, JNU_JAVANETPKG "SocketException", + "Permission denied"); } else { NET_ERROR(env, JNU_JAVANETPKG "SocketException", "set option SO_FLOW_SLA failed"); diff --git a/test/jdk/net/Sockets/Test.java b/test/jdk/net/Sockets/Test.java index 81ed76a957fd9aeb1e0f32d3a9657b6663ad3dce..8ab6c3cd9e2ef376ac74844c712c2f310ce07cbd 100644 --- a/test/jdk/net/Sockets/Test.java +++ b/test/jdk/net/Sockets/Test.java @@ -30,8 +30,10 @@ */ import java.net.*; +import java.io.IOException; import java.nio.channels.*; import java.util.concurrent.*; +import java.util.Set; import jdk.net.*; public class Test { @@ -75,6 +77,13 @@ public class Test { DatagramSocket dg = new DatagramSocket(0); final int udp_port = dg.getLocalPort(); + // If option not available, end test + Set> options = dg.supportedOptions(); + if (!options.contains(ExtendedSocketOptions.SO_FLOW_SLA)) { + System.out.println("SO_FLOW_SLA not supported"); + return; + } + final Socket s = new Socket("127.0.0.1", tcp_port); final SocketChannel sc = SocketChannel.open(); sc.connect (new InetSocketAddress("127.0.0.1", tcp_port)); @@ -149,6 +158,13 @@ public class Test { if (success) { throw new RuntimeException("Test failed"); } - } catch (UnsupportedOperationException e) {} + } catch (UnsupportedOperationException e) { + System.out.println (e); + } catch (IOException e) { + // Probably a permission error, but we're not + // going to check unless a specific permission exception + // is defined. + System.out.println (e); + } } }