gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:50:24 25 4
gpt4 key购买 nike

我正在将 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 实现中遇到了这个问题(open source,如果有人想要一个工作示例)。

在我的情况下,这是因为我将 TCP 数据包写回 VPN 接口(interface),比预期的要大,因为我的代码没有正确处理最大段大小。

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

尽管我在任何地方都找不到它的文档,但我预计这通常是原因:如果您尝试将任何数据包写入 VPN,而该数据包单独大于 VPN 预期的数据,您将遇到 ENOBUFS。

关于java - Android VpnService 写入数据包错误 - 没有可用的缓冲区空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23623035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com