Android VpnService защищает сокет, который хранится в собственном коде?

Я пишу приложение VPN, и сокет, используемый для VPN-соединения, обрабатывается в моем родном коде C, а не в Java. Как я использую VpnService.protect() на этой розетке? Я заметил, что у него есть VpnService.protect(int) перегрузка, могу ли я вернуть int, что socket возвращается из нативного кода в 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 функция работает, и похоже, что она может иметь довольно простую реализацию в C, так как кажется, что она просто использует setsockopt вызов. Но я также относительно новичок в C, поэтому не могу точно понять, как его повторить.

1 ответ

Решение

Я просто хотел проверить, что мои процессы были в силе, после завершения дополнительного тестирования я убедился, что он работает.

пример

// 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);
Другие вопросы по тегам