什么是 Android VpnService.Builder setBlocking

what is Android VpnService.Builder setBlocking

我的问题是:它到底有什么作用?例如,如果我将它设置为 true,它对我要写入 TUN 设备的包(数据报?)有何作用?据我所知,not 意味着所有要写入 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,但还是不太明白。谷歌搜索只会导致与 "how to bypass VPN blocking" 相关的搜索结果。

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

在阻塞模式下,像 read()/write() 这样的操作将阻塞,直到传输了一些数据(或发生错误),而在 non-blocking 模式下,操作可能 return 立即(使用 EAGAINEWOULDBLOCK) 如果文件描述符当前未就绪并且操作将阻塞。