【问题标题】:Will poll return -1 if any POLLERR, POLLHUP, or POLLNVAL revents are set?如果设置了任何 POLLERR、POLLHUP 或 POLLNVAL revents,poll 是否会返回 -1?
【发布时间】:2014-04-06 04:33:50
【问题描述】:

来自投票手册页:

revents 中返回的位可以包括任何在 revents 中指定的位 事件,或 POLLERR、POLLHUP 或 POLLNVAL 值之一

返回值:

成功时,返回一个正数;这是具有非零 revents 字段的结构的数量(换句话说,那些报告了事件或错误的描述符)。值 0 表示调用超时并且没有准备好文件描述符。出错时,返回 -1,并正确设置 errno。

如果 poll 在 revents 中设置了 POLLERR、POLLHUP 或 POLLNVAL 之一,这是否意味着 poll 函数将返回 -1?如果不是,那么 poll 什么时候返回 -1?

我的猜测是否定的,因为返回值解释中的第一句话是返回是具有非零 revents 字段的结构的数量。因此,如果设置了 POLLERR,则至少有 1 个结构具有非零 revent。

【问题讨论】:

    标签: c posix


    【解决方案1】:

    如果 poll 在 revents 中设置了 POLLERR、POLLHUP 或 POLLNVAL 之一,这是否意味着 poll 函数将返回 -1?

    没有。如果poll() 设置了任何revents 值,那么它将返回>0 以表明这一点。然后,您必须检查各个项目以查看哪些项目分配了 revents 值。

    如果不是,那么 poll 什么时候返回 -1?

    poll() 仅在 poll() 本身失败时返回 -1,而不是在任何被轮询的项目失败时返回。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2011-09-15
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多