C 中的 select():罗塞塔石碑?

问题描述 投票:0回答:2

大多数情况下

select()
就设置哪些标志而言很简单:

  • r 如果数据可读,
  • w 如果它是可写的,
  • e 用于套接字紧急数据

但是此规则有很多例外(或者可能是重要的扩展):“w”设置为已完成的非阻塞连接,“r”设置为带有待处理的

listen()
accept()
,等等开。

有人找到了在什么情况下设置哪些标志的简单列表吗?

c posix-select
2个回答
2
投票

来自此参考页面

当对带有

O_NONBLOCK
清除的输入函数的调用不会阻塞时,无论该函数是否成功传输数据,描述符都应被视为已准备好读取。 (该函数可能会返回数据、文件结束指示或指示其被阻止的错误以外的错误,并且在每种情况下,描述符都应被视为已准备好读取。)

当使用

O_NONBLOCK
清除对输出函数的调用不会阻塞时,无论该函数是否成功传输数据,描述符都应被视为已准备好写入。

如果套接字有待处理的错误,则应将其视为有待处理的异常情况。否则,构成异常的条件是特定于文件类型的。

除了异常集中的描述符之外,其他都非常清楚。如果阻塞描述符(无论它是文件、套接字还是其他描述符)不会阻塞,则它在各自的集合中被标记为就绪。接受和接收是“读”操作,而连接和写入是“写”操作。

唯一有问题的是异常状态,这取决于您在集合中传递的描述符的类型。


0
投票

select的参考,提供select的使用建议

http://man7.org/linux/man-pages/man2/select_tut.2.html

© www.soinside.com 2019 - 2024. All rights reserved.