我正在向Android中的VpnService实例写入UDP包,但间歇性地收到如下错误:
java.io.IOException: write failed: ENOBUFS (No buffer space available)
at libcore.io.IoBridge.write(IoBridge.java:455)
at java.io.FileOutputStream.write(FileOutputStream.java:187)
at java.io.OutputStream.write(OutputStream.java:82)只有一个DatagramSocket用于发送和接收数据包,所以我认为我没有泄漏内存。我还检查了我的堆使用情况,它仍然稳定在10-12MB。对于我正在传输的TCP数据包,我没有得到这个错误。有什么建议吗?
发布于 2020-05-22 20:43:50
我刚刚在我自己的虚拟专用网实现中遇到了这个问题(open source,如果有人想要一个工作示例的话)。
在我的例子中,这是因为我向VPN接口写回的TCP数据包比预期的要大,因为我的代码没有正确处理最大段大小。
这不是由于某个通用缓冲区等待刷新,因此对于接收应用程序来说太大的数据包将永远失败,并返回ENOBUFS。
虽然我在任何地方都找不到它的文档,但我认为这是一般的原因:如果您尝试向VPN写入任何大于VPN预期的数据包,您将遇到ENOBUFS。
https://stackoverflow.com/questions/23623035
复制相似问题