Android VpnService保护存储在本机代码中的套接字?

Nat*_* F. 7 c java sockets android android-vpn-service

我正在编写VPN应用程序,用于VPN连接的套接字是在我的本机C代码中处理的,而不是在java中处理的.我如何VpnService.protect()在该套接字上使用?我注意到它有一个VpnService.protect(int)重载,我可以socket返回从本机代码返回到Java 的int 并以这种方式保护它吗?

// 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;
}
Run Code Online (Sandbox Code Playgroud)
// Java Code
public native int initializeSocket();

. . . 

int socket = initializeSocket();
this.protect(socket);
Run Code Online (Sandbox Code Playgroud)

编辑

我确实找到了这个描述protect函数如何工作的问题,看起来它可能在C中有一个非常简单的实现,因为它似乎只是使用了一个setsockopt调用.但我对C也比较陌生,所以我不能完全遵循如何复制它.

Nat*_* F. 5

我只是想验证我的流程是否有效,在完成更多测试之后,我已经验证了它的有效性。

// 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;
}
Run Code Online (Sandbox Code Playgroud)
// Java Code
public native int initializeSocket();

. . . 

int socket = initializeSocket();
this.protect(socket);
Run Code Online (Sandbox Code Playgroud)