src/share/classes/sun/nio/ch/DatagramChannelImpl.java
Print this page
rev 7398 : 8032808: Support Solaris SO_FLOW_SLA socket option
Reviewed-by: michaelm
rev 7400 : 8029607: Type of Service (TOS) cannot be set in IPv6 header
Reviewed-by: alanb
*** 31,40 ****
--- 31,41 ----
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.nio.channels.spi.*;
import java.util.*;
import sun.net.ResourceManager;
+ import sun.net.ExtendedOptionsImpl;
/**
* An implementation of DatagramChannels.
*/
*** 192,210 ****
throw new UnsupportedOperationException("'" + name + "' not supported");
synchronized (stateLock) {
ensureOpen();
! if (name == StandardSocketOptions.IP_TOS) {
! // IPv4 only; no-op for IPv6
! if (family == StandardProtocolFamily.INET) {
! Net.setSocketOption(fd, family, name, value);
! }
! return this;
! }
!
! if (name == StandardSocketOptions.IP_MULTICAST_TTL ||
name == StandardSocketOptions.IP_MULTICAST_LOOP)
{
// options are protocol dependent
Net.setSocketOption(fd, family, name, value);
return this;
--- 193,204 ----
throw new UnsupportedOperationException("'" + name + "' not supported");
synchronized (stateLock) {
ensureOpen();
! if (name == StandardSocketOptions.IP_TOS ||
! name == StandardSocketOptions.IP_MULTICAST_TTL ||
name == StandardSocketOptions.IP_MULTICAST_LOOP)
{
// options are protocol dependent
Net.setSocketOption(fd, family, name, value);
return this;
*** 253,272 ****
throw new UnsupportedOperationException("'" + name + "' not supported");
synchronized (stateLock) {
ensureOpen();
! if (name == StandardSocketOptions.IP_TOS) {
! // IPv4 only; always return 0 on IPv6
! if (family == StandardProtocolFamily.INET) {
! return (T) Net.getSocketOption(fd, family, name);
! } else {
! return (T) Integer.valueOf(0);
! }
! }
!
! if (name == StandardSocketOptions.IP_MULTICAST_TTL ||
name == StandardSocketOptions.IP_MULTICAST_LOOP)
{
return (T) Net.getSocketOption(fd, family, name);
}
--- 247,258 ----
throw new UnsupportedOperationException("'" + name + "' not supported");
synchronized (stateLock) {
ensureOpen();
! if (name == StandardSocketOptions.IP_TOS ||
! name == StandardSocketOptions.IP_MULTICAST_TTL ||
name == StandardSocketOptions.IP_MULTICAST_LOOP)
{
return (T) Net.getSocketOption(fd, family, name);
}
*** 315,324 ****
--- 301,313 ----
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);
+ if (ExtendedOptionsImpl.flowSupported()) {
+ set.add(jdk.net.ExtendedSocketOptions.SO_FLOW_SLA);
+ }
return Collections.unmodifiableSet(set);
}
}
@Override