当一个人调用select()询问哪些文件描述符有“异常”等待时,这是什么意思?
如何触发其中一个“例外”?
如果有人能给我一个很好的解释,那就太棒了。我一直在谷歌搜索,找不到东西。
答案 0 :(得分:12)
简短形式:当TCP套接字收到带外数据时会发生异常情况。
如果您阅读select
manual page,您会看到另一个名为select_tut
的补充手册页的引用,其中包含以下解释:
exceptfds
这套装置因“异常情况”而受到关注。实际上,只有一种这样的异常情况是常见的:从TCP套接字读取的带外(OOB)数据的可用性。有关OOB数据的更多详细信息,请参阅recv(2),send(2)和tcp(7)。 (另一种不太常见的情况,其中select(2)表示在数据包模式下伪终端出现异常情况;请参阅tty_ioctl(4)。)select()返回后,除了fds之外,将清除除了所有文件描述符之外的所有文件描述符这是一种特殊情况。
答案 1 :(得分:2)
事实上,关于此的信息似乎很少。值得庆幸的是,existing question有一个非常好的答案。
例如,在Linux的情况下,它可以表示在流套接字上接收的带外数据,或者“在连接到处于分组模式的主设备的伪终端从设备上发生的状态变化”{{ 3}}