< prev index next >
src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c
Print this page
rev 14890 : 8158023: SocketExceptions contain too little information sometimes
*** 1,7 ****
/*
! * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 1711,1722 ****
struct in_addr in;
in.s_addr = htonl(getInetAddress_addr(env, value));
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error setting socket option");
}
return;
}
}
--- 1711,1722 ----
struct in_addr in;
in.s_addr = htonl(getInetAddress_addr(env, value));
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
}
*** 1739,1772 ****
ni_indexID = (*env)->GetFieldID(env, c, "index", "I");
CHECK_NULL(ni_indexID);
}
index = (*env)->GetIntField(env, value, ni_indexID);
! if ( isAdapterIpv6Enabled(env, index) != 0 ) {
if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(const char*)&index, sizeof(index)) < 0) {
if (errno == EINVAL && index > 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
"IPV6_MULTICAST_IF failed (interface has IPv4 "
"address only?)");
} else {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error setting socket option");
}
return;
}
}
/* If there are any IPv4 addresses on this interface then
* repeat the operation on the IPv4 fd */
! if (getInet4AddrFromIf (env, value, &in) < 0) {
return;
}
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error setting socket option");
}
return;
} else {
struct in_addr in;
--- 1739,1772 ----
ni_indexID = (*env)->GetFieldID(env, c, "index", "I");
CHECK_NULL(ni_indexID);
}
index = (*env)->GetIntField(env, value, ni_indexID);
! if (isAdapterIpv6Enabled(env, index) != 0) {
if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(const char*)&index, sizeof(index)) < 0) {
if (errno == EINVAL && index > 0) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
"IPV6_MULTICAST_IF failed (interface has IPv4 "
"address only?)");
} else {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
}
/* If there are any IPv4 addresses on this interface then
* repeat the operation on the IPv4 fd */
! if (getInet4AddrFromIf(env, value, &in) < 0) {
return;
}
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
} else {
struct in_addr in;
*** 1779,1790 ****
return;
}
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error setting socket option");
}
return;
}
}
}
--- 1779,1790 ----
return;
}
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(const char*)&in, sizeof(in)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
return;
}
}
}
*** 1930,1941 ****
struct in_addr in;
struct in_addr *inP = ∈
int len = sizeof(struct in_addr);
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)inP, &len) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error getting socket option");
return NULL;
}
/*
* Construct and populate an Inet4Address
--- 1930,1941 ----
struct in_addr in;
struct in_addr *inP = ∈
int len = sizeof(struct in_addr);
if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF,
(char *)inP, &len) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
/*
* Construct and populate an Inet4Address
*** 2054,2065 ****
jobject ni;
{
if (getsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(char*)&index, &len) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error getting socket option");
return NULL;
}
}
if (ni_class == NULL) {
--- 2054,2065 ----
jobject ni;
{
if (getsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF,
(char*)&index, &len) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error getting socket option");
return NULL;
}
}
if (ni_class == NULL) {
*** 2286,2297 ****
"Socket closed");
return NULL;
}
if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Error getting socket name");
return NULL;
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);
return iaObj;
--- 2286,2297 ----
"Socket closed");
return NULL;
}
if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Error getting socket name");
return NULL;
}
iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);
return iaObj;
< prev index next >