VpnService中的'protect'方法究竟是什么.java



我正在通过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。

最新更新