我正在通过VpnService.java来自ToyVpn项目。
我最初在运行方法中看到以下几行
// Create a DatagramChannel as the VPN tunnel.
tunnel = DatagramChannel.open();
// Protect the tunnel before connecting to avoid loopback.
if (!protect(tunnel.socket())) {
throw new IllegalStateException("Cannot protect the tunnel");
}
我知道第一行创建了一个数据报/UDP 通道以连接到远程服务器。但我不明白"保护"方法到底在做什么。
有人可以向我解释尽可能多的技术细节。谢谢。
它是来自android.net.VpnService库的函数,导入到ToyVpnService.java类中,如您在源代码中看到的那样。
你可以在这里找到它的作用
公共布尔保护(int 套接字)
在 API 级别 14 中添加
保护套接字免受 VPN 连接的影响。后 保护,通过此套接字发送的数据将直接进入 底层网络,因此其流量不会通过 专用网络。如果需要将某些连接保留在外部,则此方法很有用 的VPN。例如,VPN 隧道应保护自身,如果其 目标由 VPN 路由覆盖。否则其传出数据包 将被发送回 VPN 接口并导致无限循环。 如果应用程序未准备好或 撤销。
套接字未通过此方法关闭。
成功时返回 true。