src/solaris/native/java/net/net_util_md.c

Print this page
rev 7400 : 8029607: Type of Service (TOS) cannot be set in IPv6 header
Reviewed-by: alanb

*** 1349,1359 **** * 1. IPv6 on Solaris/Mac OS: no-op and will be set * in flowinfo field when connecting TCP socket, * or sending UDP packet. * 2. IPv6 on Linux: By default Linux ignores flowinfo * field so enable IPV6_FLOWINFO_SEND so that flowinfo ! * will be examined. * 3. IPv4: set socket option based on ToS and Precedence * fields (otherwise get invalid argument) */ if (level == IPPROTO_IP && opt == IP_TOS) { int *iptos; --- 1349,1359 ---- * 1. IPv6 on Solaris/Mac OS: no-op and will be set * in flowinfo field when connecting TCP socket, * or sending UDP packet. * 2. IPv6 on Linux: By default Linux ignores flowinfo * field so enable IPV6_FLOWINFO_SEND so that flowinfo ! * will be examined. We also set the IPv4 TOS option in this case. * 3. IPv4: set socket option based on ToS and Precedence * fields (otherwise get invalid argument) */ if (level == IPPROTO_IP && opt == IP_TOS) { int *iptos;
*** 1365,1377 **** #endif #if defined(AF_INET6) && defined(__linux__) if (ipv6_available()) { int optval = 1; ! return setsockopt(fd, IPPROTO_IPV6, IPV6_FLOWINFO_SEND, ! (void *)&optval, sizeof(optval)); } #endif iptos = (int *)arg; *iptos &= (IPTOS_TOS_MASK | IPTOS_PREC_MASK); } --- 1365,1379 ---- #endif #if defined(AF_INET6) && defined(__linux__) if (ipv6_available()) { int optval = 1; ! if (setsockopt(fd, IPPROTO_IPV6, IPV6_FLOWINFO_SEND, ! (void *)&optval, sizeof(optval)) < 0) { ! return -1; } + } #endif iptos = (int *)arg; *iptos &= (IPTOS_TOS_MASK | IPTOS_PREC_MASK); }