2

select()就设置哪些标志而言,大多数情况下是直截了当的:

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

但是这个规则有很多例外(或者,也许是非平凡的扩展):'w' 设置为一个已完成的非阻塞连接,'r' 设置为listen()一个挂起的连接accept(),等等。

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

4

2 回答 2

2

这个参考页面

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

O_NONBLOCK当使用clear 调用输出函数不会阻塞时,无论该函数是否会成功传输数据,都应认为描述符已准备好写入。

如果一个套接字有一个未决的错误,它应该被认为有一个异常条件未决。否则,构成异常的条件是特定于文件类型的。

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

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

于 2013-03-19T12:57:47.343 回答
0

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

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

于 2013-03-19T13:07:16.173 回答