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);