繁体   English   中英

Android VpnService 写数据包错误 - 没有可用的缓冲区空间

[英]Android VpnService write packet error - no buffer space available

我正在将 UDP 数据包写入 Android 中的 VpnService 实例,但我间歇性地收到如下错误:

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-12 MB。 我正在传输的 TCP 数据包没有出现此错误。 有什么建议?

我只是在我自己的 VPN 实现中遇到了这个问题( 开源,如果有人想要一个工作示例)。

就我而言,这是因为我将 TCP 数据包写回比预期大的 VPN 接口,因为我的代码没有正确处理最大段大小。

这不是由于某些通用缓冲区等待刷新,因此对于接收应用程序来说太大的数据包将永远因 ENOBUFS 而失败。

尽管我无法在任何地方找到它的记录,但我希望这通常是原因:如果您尝试向 VPN 写入任何比 VPN 预期大的数据包,您将遇到 ENOBUFS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM