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

nkoocmlb  于 2023-03-06  发布在  Android
关注(0)|答案(1)|浏览(121)

我正在编写一个VPN应用程序,用于VPN连接的套接字是在我的本机C代码中处理的,而不是在Java中。我如何在该套接字上使用VpnService.protect()?我注意到它有一个VpnService.protect(int)重载,我可以将socket从本机代码返回的int返回到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);
    • 编辑**

我确实找到了this question,它描述了protect函数是如何工作的,看起来它在C中的实现可能非常简单,因为它似乎只是使用了setsockopt调用。但我对C相对来说还是个新手,所以我不太明白如何复制它。

pdsfdshx

pdsfdshx1#

我只是想验证我的过程是有效的,在完成更多的测试后,我已经验证了它的工作。

    • 示例**
// Native Code
int socket;

JNIEXPORT jint JNICALL
Java_com_my_package_Class_initializeSocket
(
    JNIEnv *env,
    jobject jobj
) {
     socket = socket(AF_INET, SOCK_DGRAM, 0);

    // . . . Handle other socket preparations 
        
    return (jint)socket;
}
// Java Code
public native int initializeSocket();
    
// . . . 

int socket = initializeSocket();
this.protect(socket);

相关问题