我的问题是:它实际上是做什么的?例如,如果将其设置为true,它将对要写入TUN设备的数据包(数据报?)起作用?据我所知,这并不意味着所有要写入TUN设备的数据包都将被丢弃,而不是以其他方式处理。它表示this吗?

因此,我只能跟踪到目前为止它所做的事情:

public Builder setBlocking(boolean blocking) {
    mConfig.blocking = blocking;
    return this;
}


然后

public class Builder {
    private final VpnConfig mConfig = new VpnConfig();
    //other stuff here ...
}


我也读过official description,但是对我来说仍然不清楚。谷歌搜索只会导致与“如何绕过VPN阻止”相关的搜索结果。

最佳答案

它确实是指阻止I / O,与阻止流量或如何处理数据包无关。相反,它更改了程序与文件描述符交互的方式。

在阻塞模式下,像read()/write()这样的操作将一直阻塞,直到传输了一些数据(或发生错误)为止;而在非阻塞模式下,如果当前文件描述符是当前操作,则操作可能会立即返回(使用EAGAINEWOULDBLOCK)。尚未准备好,操作将被阻止。

10-04 19:15