“保护'到底是什么? VpnService.java中的方法

时间:2015-04-21 22:30:05

标签: java android sockets vpn

我正在从ToyVpn项目中查看VpnService.java。

我最初在run方法中看到以下几行

 // 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通道来连接远程服务器。但我不明白“保护”方法到底在做什么。

有人可以向我解释尽可能多的技术细节。谢谢。

1 个答案:

答案 0 :(得分:1)

这是来自android.net.VpnService library的函数,该函数在ToyVpnService.java类中导入,如the source code中所示

您可以找到它的作用here

  

public boolean protect(int socket)

     

在API级别14中添加

     

保护套接字免受VPN连接的影响。后   保护,通过此套接字发送的数据将直接发送到   底层网络,因此其流量不会通过转发   VPN。如果需要将某些连接保留在外部,则此方法很有用   的VPN。例如,VPN隧道应该保护自己   目的地由VPN路由覆盖。否则它的传出包   将被发送回VPN接口并导致无限循环。   如果应用程序未准备好,则此方法将失败   撤销。

     

此方法未关闭套接字。

     

成功时返回true。