Throw FileNotFoundException when connecting to a missing UDS path
Motivation: Exception handling is nicer when a more specific Exception is thrown Modification: Add a static reference for ENOENT, and throw FNFE if it is returned Result: More precise exception handling
This commit is contained in:
parent
460d125121
commit
d8cb9ce09f
@ -78,6 +78,10 @@ void netty_unix_errors_throwOutOfMemoryError(JNIEnv* env) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// JNI Registered Methods Begin
|
// JNI Registered Methods Begin
|
||||||
|
static jint netty_unix_errors_errnoENOENT(JNIEnv* env, jclass clazz) {
|
||||||
|
return ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
static jint netty_unix_errors_errnoENOTCONN(JNIEnv* env, jclass clazz) {
|
static jint netty_unix_errors_errnoENOTCONN(JNIEnv* env, jclass clazz) {
|
||||||
return ENOTCONN;
|
return ENOTCONN;
|
||||||
}
|
}
|
||||||
@ -129,6 +133,7 @@ static jstring netty_unix_errors_strError(JNIEnv* env, jclass clazz, jint error)
|
|||||||
|
|
||||||
// JNI Method Registration Table Begin
|
// JNI Method Registration Table Begin
|
||||||
static const JNINativeMethod statically_referenced_fixed_method_table[] = {
|
static const JNINativeMethod statically_referenced_fixed_method_table[] = {
|
||||||
|
{ "errnoENOENT", "()I", (void *) netty_unix_errors_errnoENOENT },
|
||||||
{ "errnoENOTCONN", "()I", (void *) netty_unix_errors_errnoENOTCONN },
|
{ "errnoENOTCONN", "()I", (void *) netty_unix_errors_errnoENOTCONN },
|
||||||
{ "errnoEBADF", "()I", (void *) netty_unix_errors_errnoEBADF },
|
{ "errnoEBADF", "()I", (void *) netty_unix_errors_errnoEBADF },
|
||||||
{ "errnoEPIPE", "()I", (void *) netty_unix_errors_errnoEPIPE },
|
{ "errnoEPIPE", "()I", (void *) netty_unix_errors_errnoEPIPE },
|
||||||
|
@ -17,6 +17,7 @@ package io.netty.channel.unix;
|
|||||||
|
|
||||||
import io.netty.util.internal.EmptyArrays;
|
import io.netty.util.internal.EmptyArrays;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.ConnectException;
|
import java.net.ConnectException;
|
||||||
import java.net.NoRouteToHostException;
|
import java.net.NoRouteToHostException;
|
||||||
@ -33,6 +34,7 @@ import static io.netty.channel.unix.ErrorsStaticallyReferencedJniMethods.*;
|
|||||||
*/
|
*/
|
||||||
public final class Errors {
|
public final class Errors {
|
||||||
// As all our JNI methods return -errno on error we need to compare with the negative errno codes.
|
// As all our JNI methods return -errno on error we need to compare with the negative errno codes.
|
||||||
|
public static final int ERRNO_ENOENT_NEGATIVE = -errnoENOENT();
|
||||||
public static final int ERRNO_ENOTCONN_NEGATIVE = -errnoENOTCONN();
|
public static final int ERRNO_ENOTCONN_NEGATIVE = -errnoENOTCONN();
|
||||||
public static final int ERRNO_EBADF_NEGATIVE = -errnoEBADF();
|
public static final int ERRNO_EBADF_NEGATIVE = -errnoEBADF();
|
||||||
public static final int ERRNO_EPIPE_NEGATIVE = -errnoEPIPE();
|
public static final int ERRNO_EPIPE_NEGATIVE = -errnoEPIPE();
|
||||||
@ -104,6 +106,9 @@ public final class Errors {
|
|||||||
if (err == ERROR_EISCONN_NEGATIVE) {
|
if (err == ERROR_EISCONN_NEGATIVE) {
|
||||||
throw new AlreadyConnectedException();
|
throw new AlreadyConnectedException();
|
||||||
}
|
}
|
||||||
|
if (err == ERRNO_ENOENT_NEGATIVE) {
|
||||||
|
throw new FileNotFoundException();
|
||||||
|
}
|
||||||
throw new ConnectException(method + "(..) failed: " + ERRORS[-err]);
|
throw new ConnectException(method + "(..) failed: " + ERRORS[-err]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,6 +137,9 @@ public final class Errors {
|
|||||||
if (err == ERRNO_ENOTCONN_NEGATIVE) {
|
if (err == ERRNO_ENOTCONN_NEGATIVE) {
|
||||||
throw new NotYetConnectedException();
|
throw new NotYetConnectedException();
|
||||||
}
|
}
|
||||||
|
if (err == ERRNO_ENOENT_NEGATIVE) {
|
||||||
|
throw new FileNotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: We could even go further and use a pre-instantiated IOException for the other error codes, but for
|
// TODO: We could even go further and use a pre-instantiated IOException for the other error codes, but for
|
||||||
// all other errors it may be better to just include a stack trace.
|
// all other errors it may be better to just include a stack trace.
|
||||||
|
@ -30,6 +30,7 @@ final class ErrorsStaticallyReferencedJniMethods {
|
|||||||
|
|
||||||
private ErrorsStaticallyReferencedJniMethods() { }
|
private ErrorsStaticallyReferencedJniMethods() { }
|
||||||
|
|
||||||
|
static native int errnoENOENT();
|
||||||
static native int errnoEBADF();
|
static native int errnoEBADF();
|
||||||
static native int errnoEPIPE();
|
static native int errnoEPIPE();
|
||||||
static native int errnoECONNRESET();
|
static native int errnoECONNRESET();
|
||||||
|
Loading…
Reference in New Issue
Block a user