< prev index next >
src/java.base/unix/native/libnet/PlainSocketImpl.c
Print this page
rev 14618 : 8158023: SocketExceptions contain too little information sometimes
@@ -1,7 +1,7 @@
/*
- * 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -356,12 +356,12 @@
if (connect_rv != 0) {
socklen_t optlen;
jlong prevTime = JVM_CurrentTimeMillis(env, 0);
if (errno != EINPROGRESS) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
- "connect failed");
+ JNU_ThrowByNameWithLastError
+ (env, JNU_JAVANETPKG "ConnectException", "connect failed");
SET_BLOCKING(fd);
return;
}
/*
@@ -453,32 +453,33 @@
return;
}
#endif
#if defined(EPROTO)
if (errno == EPROTO) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ProtocolException",
- "Protocol error");
+ JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ProtocolException",
+ "Protocol error");
return;
}
#endif
if (errno == ECONNREFUSED) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
- "Connection refused");
+ JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
+ "Connection refused");
} else if (errno == ETIMEDOUT) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
- "Connection timed out");
+ JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
+ "Connection timed out");
} else if (errno == EHOSTUNREACH) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException",
- "Host unreachable");
+ JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException",
+ "Host unreachable");
} else if (errno == EADDRNOTAVAIL) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException",
- "Address not available");
+ JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "NoRouteToHostException",
+ "Address not available");
} else if ((errno == EISCONN) || (errno == EBADF)) {
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;
}
(*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
@@ -496,12 +497,12 @@
/* Now that we're a connected socket, let's extract the port number
* that the system chose for us and store it in the Socket object.
*/
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);
}
}
@@ -534,23 +535,24 @@
JNU_ThrowNullPointerException(env, "iaObj is null.");
return;
}
/* 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);
if (NET_Bind(fd, (struct sockaddr *)&him, len) < 0) {
if (errno == EADDRINUSE || errno == EADDRNOTAVAIL ||
errno == EPERM || errno == EACCES) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "BindException",
- "Bind failed");
+ JNU_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;
}
/* set the address */
@@ -561,12 +563,12 @@
socklen_t slen = sizeof(him);
/* Now that we're a connected socket, let's extract the port number
* 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);
(*env)->SetIntField(env, this, psi_localportID, localport);
} else {
@@ -578,12 +580,12 @@
* Class: java_net_PlainSocketImpl
* Method: socketListen
* 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);
/* fdObj's int fd field */
int fd;
@@ -602,12 +604,12 @@
*/
if (count == 0x7fffffff)
count -= 1;
if (listen(fd, count) == -1) {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Listen failed");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Listen failed");
}
}
/*
* Class: java_net_PlainSocketImpl
@@ -682,11 +684,12 @@
if (errno == EBADF) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} 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;
}
newfd = NET_Accept(fd, (struct sockaddr *)&him, &slen);
@@ -725,11 +728,12 @@
errno = EBADF;
}
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;
}
@@ -779,12 +783,12 @@
/* NET_SocketAvailable returns 0 for failure, 1 for success */
if (NET_SocketAvailable(fd, &ret) == 0){
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;
}
@@ -934,12 +938,12 @@
jio_snprintf(fullMsg, sizeof(fullMsg), "Invalid option or socket reset by remote peer");
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", fullMsg);
return;
}
#endif /* __solaris__ */
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "Error setting socket option");
+ JNU_ThrowByNameWithMessageAndLastError
+ (env, JNU_JAVANETPKG "SocketException", "Error setting socket option");
}
}
/*
* Class: java_net_PlainSocketImpl
@@ -979,12 +983,12 @@
jfieldID iaFieldID;
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);
CHECK_NULL_RETURN(iaObj, -1);
@@ -1012,12 +1016,12 @@
} else {
optlen = sizeof(optval.i);
}
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;
}
switch (cmd) {
case java_net_SocketOptions_SO_LINGER:
@@ -1061,8 +1065,8 @@
}
}
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");
}
}
< prev index next >