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

我正在编写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; } 

 // Java Code public native int initializeSocket(); . . . int socket = initializeSocket(); this.protect(socket); 

编辑

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

我只是想validation我的流程是否有效,在完成更多测试后我已经validation它是否有效。

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