# HG changeset patch # User clanger # Date 1467146197 -7200 # Tue Jun 28 22:36:37 2016 +0200 # Node ID 7580312a66553b40527abeb323d6cb21322544a5 # Parent 1f3481f377e6ee42ece51b56231129b8ef0cf4d0 8158023: SocketExceptions contain too little information sometimes diff --git a/make/mapfiles/libjava/mapfile-vers b/make/mapfiles/libjava/mapfile-vers --- a/make/mapfiles/libjava/mapfile-vers +++ b/make/mapfiles/libjava/mapfile-vers @@ -56,6 +56,7 @@ JNU_ThrowArrayIndexOutOfBoundsException; JNU_ThrowByName; JNU_ThrowByNameWithLastError; + JNU_ThrowByNameWithMessageAndLastError; JNU_ThrowClassNotFoundException; JNU_ThrowIllegalAccessError; JNU_ThrowIllegalAccessException; diff --git a/src/java.base/share/native/libjava/jni_util.c b/src/java.base/share/native/libjava/jni_util.c --- a/src/java.base/share/native/libjava/jni_util.c +++ b/src/java.base/share/native/libjava/jni_util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -147,9 +147,9 @@ JNU_ThrowByName(env, "java/lang/InstantiationException", msg); } - -/* Throw an exception by name, using the string returned by - * JVM_LastErrorString for the detail string. If the last-error +/* + * Throw an exception by name, using the string returned by + * getLastErrorString for the detail string. If the last-error * string is NULL, use the given default detail string. */ JNIEXPORT void JNICALL @@ -174,9 +174,64 @@ } } -/* Throw an IOException, using the last-error string for the detail - * string. If the last-error string is NULL, use the given default - * detail string. +/* + * Throw an exception by name, using a given message and the string + * returned by getLastErrorString to construct the detail string. + */ +JNIEXPORT void JNICALL +JNU_ThrowByNameWithMessageAndLastError + (JNIEnv *env, const char *name, const char *message) +{ + char buf[256]; + size_t n = getLastErrorString(buf, sizeof(buf)); + size_t messagelen = message == NULL ? 0 : strlen(message); + + if (n > 0) { + jstring s = JNU_NewStringPlatform(env, buf); + if (s != NULL) { + jobject x = NULL; + if (messagelen) { + jstring s2 = NULL; + size_t messageextlen = messagelen + 4; + char *str1 = (char *)malloc((messageextlen) * sizeof(char)); + if (str1 == 0) { + JNU_ThrowOutOfMemoryError(env, 0); + return; + } + jio_snprintf(str1, messageextlen, " (%s)", message); + s2 = (*env)->NewStringUTF(env, str1); + free(str1); + if (s2 != NULL) { + jstring s3 = JNU_CallMethodByName( + env, NULL, s, "concat", + "(Ljava/lang/String;)Ljava/lang/String;", + s2).l; + (*env)->DeleteLocalRef(env, s2); + if (s3 != NULL) { + (*env)->DeleteLocalRef(env, s); + s = s3; + } + } + } + x = JNU_NewObjectByName(env, name, "(Ljava/lang/String;)V", s); + if (x != NULL) { + (*env)->Throw(env, x); + } + } + } + + if (!(*env)->ExceptionOccurred(env)) { + if (messagelen) { + JNU_ThrowByName(env, name, message); + } else { + JNU_ThrowByName(env, name, "no further information"); + } + } +} + +/* + * Convenience method. + * Call JNU_ThrowByNameWithLastError for java.io.IOException. */ JNIEXPORT void JNICALL JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail) diff --git a/src/java.base/share/native/libjava/jni_util.h b/src/java.base/share/native/libjava/jni_util.h --- a/src/java.base/share/native/libjava/jni_util.h +++ b/src/java.base/share/native/libjava/jni_util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -97,17 +97,26 @@ JNIEXPORT void JNICALL JNU_ThrowInstantiationException(JNIEnv *env, const char *msg); -/* Throw an exception by name, using the string returned by - * JVM_LastErrorString for the detail string. If the last-error +/* + * Throw an exception by name, using the string returned by + * getLastErrorString for the detail string. If the last-error * string is NULL, use the given default detail string. */ JNIEXPORT void JNICALL JNU_ThrowByNameWithLastError(JNIEnv *env, const char *name, - const char *defaultMessage); + const char *defaultDetail); -/* Throw an IOException, using the last-error string for the detail - * string. If the last-error string is NULL, use the given default - * detail string. +/* + * Throw an exception by name, using a given message and the string + * returned by getLastErrorString to construct the detail string. + */ +JNIEXPORT void JNICALL +JNU_ThrowByNameWithMessageAndLastError + (JNIEnv *env, const char *name, const char *message); + +/* + * Convenience method. + * Call JNU_ThrowByNameWithLastError for java.io.IOException. */ JNIEXPORT void JNICALL JNU_ThrowIOExceptionWithLastError(JNIEnv *env, const char *defaultDetail); diff --git a/src/java.base/unix/native/libnet/NetworkInterface.c b/src/java.base/unix/native/libnet/NetworkInterface.c --- a/src/java.base/unix/native/libnet/NetworkInterface.c +++ b/src/java.base/unix/native/libnet/NetworkInterface.c @@ -621,8 +621,8 @@ (*env)->ReleaseStringUTFChars(env, name, name_utf); if (ret < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getFlags() failed"); return -1; } @@ -1061,8 +1061,8 @@ // If EPROTONOSUPPORT is returned it means we don't have // support for this proto so don't throw an exception. if (errno != EPROTONOSUPPORT) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Socket creation failed"); } return -1; } @@ -1087,13 +1087,13 @@ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno == EPROTONOSUPPORT) { if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } } else { // errno is not NOSUPPORT - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV4 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); return -1; } } @@ -1122,15 +1122,15 @@ // SIOCGIFCOUNT doesn't work ifc.ifc_buf = NULL; if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed"); return ifs; } #elif defined(_AIX) ifc.ifc_buf = NULL; if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGSIZIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed"); return ifs; } #endif /* __linux__ */ @@ -1142,8 +1142,8 @@ siocgifconfRequest = CSIOCGIFCONF; #endif if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed"); free(buf); return ifs; } @@ -1268,8 +1268,8 @@ ifc.ifc_buf = NULL; if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGSIZIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed"); return ifs; } bufsize = ifc.ifc_len; @@ -1282,8 +1282,8 @@ ifc.ifc_len = bufsize; ifc.ifc_buf = buf; if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl CSIOCGIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed"); free(buf); return ifs; } @@ -1368,16 +1368,16 @@ // Let's make sure the interface does have a broadcast address. if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFFLAGS) failed"); return ret; } if (if2.ifr_flags & IFF_BROADCAST) { // It does, let's retrieve it if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFBRDADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed"); return ret; } @@ -1400,8 +1400,8 @@ strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1); if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNETMASK failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed"); return -1; } @@ -1463,8 +1463,8 @@ memset((char *)&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1); if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFHWADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFHWADDR) failed"); return -1; } @@ -1493,8 +1493,8 @@ } if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFMTU failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed"); return -1; } @@ -1535,15 +1535,15 @@ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno == EPROTONOSUPPORT) { if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } alreadyV6=1; } else { // errno is not NOSUPPORT - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV4 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); return -1; } } @@ -1562,8 +1562,8 @@ if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) { close(sock); if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } } @@ -1607,8 +1607,8 @@ numifs.lifn_family = family; numifs.lifn_flags = 0; if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFNUM failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNUM) failed"); return ifs; } @@ -1621,8 +1621,8 @@ ifc.lifc_len = bufsize; ifc.lifc_buf = buf; if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFCONF failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFCONF) failed"); free(buf); return ifs; } @@ -1689,16 +1689,16 @@ // Let's make sure the interface does have a broadcast address if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFFLAGS) failed"); return ret; } if (if2.lifr_flags & IFF_BROADCAST) { // It does, let's retrieve it if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFBRDADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFBRDADDR) failed"); return ret; } @@ -1721,8 +1721,8 @@ strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1); if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFNETMASK failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNETMASK) failed"); return -1; } @@ -1764,8 +1764,8 @@ msg.len = DL_PHYS_ADDR_REQ_SIZE; if (putmsg(fd, &msg, NULL, 0) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "putmsg failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "putmsg() failed"); return -1; } @@ -1775,8 +1775,8 @@ msg.len = 0; msg.maxlen = sizeof (buf); if (getmsg(fd, &msg, NULL, &flags) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getmsg failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getmsg() failed"); return -1; } @@ -1860,8 +1860,8 @@ strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1); if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGLIFMTU failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFMTU) failed"); return -1; } @@ -1900,13 +1900,13 @@ if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { if (errno == EPROTONOSUPPORT) { if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV6 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed"); return -1; } } else { // errno is not NOSUPPORT - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "IPV4 Socket creation failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed"); return -1; } } @@ -1927,8 +1927,8 @@ struct ifaddrs *ifa, *origifa; if (getifaddrs(&origifa) != 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getifaddrs() function failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed"); return ifs; } @@ -1997,8 +1997,8 @@ struct in6_ifreq ifr6; if (getifaddrs(&origifa) != 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "getifaddrs() function failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed"); return ifs; } @@ -2014,8 +2014,8 @@ MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len)); if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNETMASK_IN6 failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK_IN6) failed"); freeifaddrs(origifa); freeif(ifs); return NULL; @@ -2075,16 +2075,16 @@ // Make sure the interface does have a broadcast address if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFFLAGS failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFFLAGS) failed"); return ret; } if (if2.ifr_flags & IFF_BROADCAST) { // It does, let's retrieve it if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFBRDADDR failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed"); return ret; } @@ -2107,8 +2107,8 @@ strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1); if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFNETMASK failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed"); return -1; } @@ -2156,8 +2156,8 @@ strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1); if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl SIOCGIFMTU failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed"); return -1; } diff --git a/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c b/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c --- a/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c +++ b/src/java.base/unix/native/libnet/PlainDatagramSocketImpl.c @@ -221,8 +221,8 @@ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException", "Bind failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Bind failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Bind failed"); } return; } @@ -233,8 +233,8 @@ * that the system chose for us and store it in the Socket object. */ if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return; } @@ -469,7 +469,7 @@ JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", "ICMP Port Unreachable"); } else { - NET_ThrowByNameWithLastError(env, "java/io/IOException", "sendto failed"); + JNU_ThrowIOExceptionWithLastError(env, "sendto failed"); } } @@ -520,7 +520,8 @@ } else if (errno == ENOMEM) { JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Peek failed"); } return ret; } @@ -544,7 +545,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Peek failed"); } } return 0; @@ -616,7 +618,8 @@ } else if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); #else } else { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); @@ -681,7 +684,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); } } } else { @@ -827,7 +831,8 @@ } else if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); #else } else { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); @@ -859,7 +864,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Receive failed"); } } } else { @@ -932,8 +938,8 @@ } if ((fd = socket(domain, SOCK_DGRAM, 0)) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error creating socket"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error creating socket"); return; } @@ -1080,8 +1086,8 @@ if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -1109,8 +1115,8 @@ "IPV6_MULTICAST_IF failed (interface has IPv4 " "address only?)"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1129,8 +1135,8 @@ if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -1256,8 +1262,10 @@ on = (*env)->GetBooleanField(env, value, fid); loopback = (!on ? 1 : 0); - if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, (const void *)&loopback, sizeof(char)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, + (const void *)&loopback, sizeof(char)) < 0) { + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } } @@ -1280,8 +1288,10 @@ on = (*env)->GetBooleanField(env, value, fid); loopback = (!on ? 1 : 0); - if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, (const void *)&loopback, sizeof(int)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + if (NET_SetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, + (const void *)&loopback, sizeof(int)) < 0) { + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } @@ -1420,7 +1430,8 @@ } if (NET_SetSockOpt(fd, level, optname, (const void *)&optval, optlen) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); return; } } @@ -1483,8 +1494,8 @@ if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char *)inP, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -1581,8 +1592,8 @@ if (getsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char*)&index, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -1726,8 +1737,8 @@ len = SOCKADDR_LEN; if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return NULL; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); @@ -1752,8 +1763,8 @@ } if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -1805,8 +1816,8 @@ char ittl = (char)ttl; if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl, sizeof(ittl)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -1818,8 +1829,8 @@ int ittl = (int)ttl; if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char*)&ittl, sizeof(ittl)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } #endif @@ -1901,8 +1912,8 @@ if (getsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char*)&ttl, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return -1; } return (jint)ttl; @@ -1913,8 +1924,8 @@ socklen_t len = sizeof(ttl); if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return -1; } return (jint)ttl; diff --git a/src/java.base/unix/native/libnet/PlainSocketImpl.c b/src/java.base/unix/native/libnet/PlainSocketImpl.c --- a/src/java.base/unix/native/libnet/PlainSocketImpl.c +++ b/src/java.base/unix/native/libnet/PlainSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -476,7 +476,8 @@ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "connect failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "connect failed"); } return; } @@ -498,8 +499,8 @@ */ socklen_t slen = SOCKADDR_LEN; if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); } else { localport = NET_GetPortFromSockaddr((struct sockaddr *)&him); (*env)->SetIntField(env, this, psi_localportID, localport); @@ -536,8 +537,9 @@ } /* bind */ - if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, &len, JNI_TRUE) != 0) { - return; + if (NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, + &len, JNI_TRUE) != 0) { + return; } setDefaultScopeID(env, (struct sockaddr *)&him); @@ -547,8 +549,8 @@ NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException", "Bind failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Bind failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Bind failed"); } return; } @@ -563,8 +565,8 @@ * that the system chose for us and store it in the Socket object. */ if (getsockname(fd, (struct sockaddr *)&him, &slen) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return; } localport = NET_GetPortFromSockaddr((struct sockaddr *)&him); @@ -580,8 +582,8 @@ * Signature: (I)V */ JNIEXPORT void JNICALL -Java_java_net_PlainSocketImpl_socketListen (JNIEnv *env, jobject this, - jint count) +Java_java_net_PlainSocketImpl_socketListen(JNIEnv *env, jobject this, + jint count) { /* this FileDescriptor fd field */ jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID); @@ -604,8 +606,8 @@ count -= 1; if (listen(fd, count) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Listen failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Listen failed"); } } @@ -684,7 +686,8 @@ } else if (errno == ENOMEM) { JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Accept failed"); } return; } @@ -727,7 +730,8 @@ if (errno == EBADF) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Accept failed"); } } return; @@ -781,8 +785,8 @@ if (errno == ECONNRESET) { JNU_ThrowByName(env, "sun/net/ConnectionResetException", ""); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "ioctl FIONREAD failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "ioctl FIONREAD failed"); } } return ret; @@ -936,8 +940,8 @@ return; } #endif /* __solaris__ */ - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } } @@ -981,8 +985,8 @@ len = SOCKADDR_LEN; if (getsockname(fd, (struct sockaddr *)&him, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return -1; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); @@ -1014,8 +1018,8 @@ } if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return -1; } @@ -1063,6 +1067,6 @@ } n = NET_Send(fd, (char *)&d, 1, MSG_OOB); if (n == -1) { - NET_ThrowByNameWithLastError(env, "java/io/IOException", "Write failed"); + JNU_ThrowIOExceptionWithLastError(env, "Write failed"); } } diff --git a/src/java.base/unix/native/libnet/SocketInputStream.c b/src/java.base/unix/native/libnet/SocketInputStream.c --- a/src/java.base/unix/native/libnet/SocketInputStream.c +++ b/src/java.base/unix/native/libnet/SocketInputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -111,8 +111,8 @@ } else if (errno == ENOMEM) { JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "select/poll failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "select/poll failed"); } } if (bufP != BUF) { @@ -145,8 +145,8 @@ break; default: - NET_ThrowByNameWithLastError(env, - JNU_JAVANETPKG "SocketException", "Read failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Read failed"); } } } else { diff --git a/src/java.base/unix/native/libnet/SocketOutputStream.c b/src/java.base/unix/native/libnet/SocketOutputStream.c --- a/src/java.base/unix/native/libnet/SocketOutputStream.c +++ b/src/java.base/unix/native/libnet/SocketOutputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -114,8 +114,8 @@ JNU_ThrowByName(env, "sun/net/ConnectionResetException", "Connection reset"); } else { - NET_ThrowByNameWithLastError(env, "java/net/SocketException", - "Write failed"); + JNU_ThrowByNameWithMessageAndLastError + (env, "java/net/SocketException", "Write failed"); } if (bufP != BUF) { free(bufP); diff --git a/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c b/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c --- a/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c +++ b/src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -1713,8 +1713,8 @@ 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"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1741,7 +1741,7 @@ } index = (*env)->GetIntField(env, value, ni_indexID); - if ( isAdapterIpv6Enabled(env, index) != 0 ) { + if (isAdapterIpv6Enabled(env, index) != 0) { if (setsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF, (const char*)&index, sizeof(index)) < 0) { if (errno == EINVAL && index > 0) { @@ -1749,8 +1749,8 @@ "IPV6_MULTICAST_IF failed (interface has IPv4 " "address only?)"); } else { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1758,13 +1758,13 @@ /* If there are any IPv4 addresses on this interface then * repeat the operation on the IPv4 fd */ - if (getInet4AddrFromIf (env, value, &in) < 0) { + 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"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } else { @@ -1781,8 +1781,8 @@ if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error setting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error setting socket option"); } return; } @@ -1932,8 +1932,8 @@ 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"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } @@ -2056,8 +2056,8 @@ { if (getsockopt(fd1, IPPROTO_IPV6, IPV6_MULTICAST_IF, (char*)&index, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket option"); return NULL; } } @@ -2288,8 +2288,8 @@ } if (getsockname(fd, (struct sockaddr *)&him, &len) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return NULL; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port); diff --git a/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c b/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c --- a/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c +++ b/src/java.base/windows/native/libnet/TwoStacksPlainSocketImpl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * 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 @@ -1054,8 +1054,8 @@ } if (getsockname(fd, (struct sockaddr *)&him, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket name"); + JNU_ThrowByNameWithMessageAndLastError + (env, JNU_JAVANETPKG "SocketException", "Error getting socket name"); return -1; } iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&him, &port);