我的问题是:它实际上是做什么的?例如,如果将其设置为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()
这样的操作将一直阻塞,直到传输了一些数据(或发生错误)为止;而在非阻塞模式下,如果当前文件描述符是当前操作,则操作可能会立即返回(使用EAGAIN
或EWOULDBLOCK
)。尚未准备好,操作将被阻止。