为什么UDP套接字不关闭原因选择要返回
Why doesnt UDP socket close cause select to return?
i在FDSET上有一个选择,其中包括一些TCP连接和一个未结合的UDP连接。在Windows中,当我从另一个线程关闭UDP连接的套接字时,它就标志着选择要返回的选择。但是,在Ubuntu中,情况并非如此,为什么?
如果这取决于您是否试图在 select
或之前 select
(and FD_SET
)之前关闭fd 。在这两种情况下,由于下面规定的原因,行为都是不确定的。也许它在Windows下做一件事,但您不能依靠它。
如果您试图在中关闭fd select
(即在输入select()
系统调用后但在返回之前),则该行为是未定义的,因为此处列出的原因:如果您关闭(2)单独的线程中的文件描述符(2)?
如果您试图在 select
(和 FD_SET
)之前关闭FD ,那么您正在尝试使用FD_SET
,然后在现已关闭的FD上进行select()
,即无效。标准在这里:http://pubs.opengroup.org/onlinepubs/009695399/functions/select.html,这说FD_SET
宏甚至可能都不要求select()
查看您的FD。
如果FD参数较少,这些宏的行为是不确定的 大于0或大于或等于fd_setsize,或者如果FD不是有效的 文件描述符,或任何参数是表达式 效果。
如果这样做(并且仅在此功能时),则select
应返回EBADF
:
在以下条件下,pselect()和select()应失败,并且 将errno设置为:
[ebadf]指定文件的一个或多个文件描述符设置 不是有效的打开文件描述符的描述符。
但是您无法知道情况,因为FD_SET
可能同样忽略了无效的文件描述符。
为了完整性,如果您在close
之前进行FD_SET
,但是进行select
,则应查看EBADF
。
- 在 Qt 中选择查询返回"value: not positioned on a valid record"
- 通过方法返回的重新选择参考
- CListCtrl GetSelectionMark() 未返回正确选择的行
- 如何确定函数的返回值在编译时选择可能的选项
- 使用 std::function 时选择自动返回类型而不是构造函数的调用运算符
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- 返回类型在C 中选择
- C++选择语句返回 true
- 为什么UDP套接字不关闭原因选择要返回
- 为什么我的选择排序返回原始向量中不在的值
- 使用 firebreath 插件打开文件夹对话框并异步返回文件夹选择,这样 java 脚本就不会被阻止
- C++ SQLite3 如何知道是否选择返回 0 行
- 我的快速选择算法未返回正确的值
- 如果我不想在 QAbstractItemView 中实现选择,我应该返回哪些值?
- C++多态性+用于选择返回类型的模板成员函数.如何做到这一点
- 函数返回类型是否会影响重载的选择
- QTreeWidget::currentItem没有选择任何内容时返回的内容
- 选择函数一直返回-1
- 在Windows Phone平台上选择返回-1的函数
- 选择返回零,但有更多的数据和recv工作太