Android VpnService 保护存储在本机代码中的套接字?
Android VpnService protect socket that's stored in native code?
我正在编写一个 VPN 应用程序,用于 VPN 连接的套接字是在我的本机 C 代码中处理的,而不是在 java 中处理的。我如何在该套接字上使用 VpnService.protect()
?我注意到它有一个 VpnService.protect(int)
重载,我可以 return int that socket
returns 从本机代码到 Java 并以这种方式保护它吗?
例子
// Native Code
int socket;
JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
JNIEnv *env,
jobject jobj
) {
socket = socket(AF_INET, SOCK_DGRAM, 0);
// . . . Handler other socket preparations
return (jint)socket;
}
// Java Code
public native int initializeSocket();
. . .
int socket = initializeSocket();
this.protect(socket);
编辑
我确实找到了描述 protect
函数如何工作的 this question,看起来它可能在 C 中有一个非常简单的实现,因为它似乎只是使用 setsockopt
称呼。但我对 C 也比较陌生,所以我不太了解如何复制它。
我只是想验证我的过程是否有效,在完成更多测试后我已经验证它有效。
例子
// Native Code
int socket;
JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
JNIEnv *env,
jobject jobj
) {
socket = socket(AF_INET, SOCK_DGRAM, 0);
// . . . Handler other socket preparations
return (jint)socket;
}
// Java Code
public native int initializeSocket();
. . .
int socket = initializeSocket();
this.protect(socket);
我正在编写一个 VPN 应用程序,用于 VPN 连接的套接字是在我的本机 C 代码中处理的,而不是在 java 中处理的。我如何在该套接字上使用 VpnService.protect()
?我注意到它有一个 VpnService.protect(int)
重载,我可以 return int that socket
returns 从本机代码到 Java 并以这种方式保护它吗?
例子
// Native Code
int socket;
JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
JNIEnv *env,
jobject jobj
) {
socket = socket(AF_INET, SOCK_DGRAM, 0);
// . . . Handler other socket preparations
return (jint)socket;
}
// Java Code
public native int initializeSocket();
. . .
int socket = initializeSocket();
this.protect(socket);
编辑
我确实找到了描述 protect
函数如何工作的 this question,看起来它可能在 C 中有一个非常简单的实现,因为它似乎只是使用 setsockopt
称呼。但我对 C 也比较陌生,所以我不太了解如何复制它。
我只是想验证我的过程是否有效,在完成更多测试后我已经验证它有效。
例子
// Native Code
int socket;
JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
JNIEnv *env,
jobject jobj
) {
socket = socket(AF_INET, SOCK_DGRAM, 0);
// . . . Handler other socket preparations
return (jint)socket;
}
// Java Code
public native int initializeSocket();
. . .
int socket = initializeSocket();
this.protect(socket);