【问题标题】:read(2) on Tun fd returned zeroTun fd 上的 read(2) 返回零
【发布时间】:2018-11-23 02:00:26
【问题描述】:

在我的应用程序中,创建了一个 Tun 接口,并且该进程在 select(2) 循环中继续使用 read(2) 读取关联的 fd。但是,当我在应用程序中调试问题时,我发现在某些时候对 Tun 文件描述符的 read(2) 操作可能会返回零。这可能吗?发生的条件是什么?

提前致谢。 木质的

【问题讨论】:

  • 你需要提供代码,这样简单的描述没人能帮你。
  • 可能我没说清楚。我提供的一些信息是为了提供上下文,帖子中的真正问题是:在什么情况下,Tun 文件描述符上的 read(2) 可以返回 0。如果复制/粘贴代码,它将包含很多不相关的信息。
  • 这里的指导原则是你必须显示代码,否则这里没有人可以帮助你。

标签: linux tun tun-tap


【解决方案1】:

这是来自手册页的信息 read(2)click here

返回值

成功时,返回读取的字节数(零表示文件结束),文件位置提前该数字。如果此数字小于请求的字节数,则不是错误;这可能会发生,例如因为现在实际可用的字节较少(可能是因为我们接近文件结尾,或者因为我们正在从管道或终端读取),或者因为 read() 被中断信号。出错时,返回 -1,并适当设置 errno。在这种情况下,未指定文件位置(如果有)是否更改。

【讨论】:

  • 是的,我一般都知道 read(2)。但我不明白 EOF 对于由调用 read(2) 的同一进程创建的 tun 设备意味着什么。
  • EOF 表示文件结束,表示文件偏移在最后是当前的。这可能意味着没有更多数据要读取。
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2011-01-25
  • 2022-11-02
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
相关资源
最近更新 更多