1

我正在寻求帮助以了解以下情况: 1. 我有一个 TCP 套接字连接建立了对等点。2. 我添加到要由 select 监视的文件描述符列表 3. select 提醒我注意套接字上的任何活动,并且我的应用程序处理套接字上的对等方发送的数据。4. 现在,我从要由 select 监视的文件描述符列表中删除与套接字关联的文件描述符。5. Peer 在该套接字上向我发送一些数据。我不阅读该数据。6. 几秒钟后,我再次将与socket关联的文件描述符放到select要监控的文件描述符列表中 7. select now会立即让我知道socket是可读的吗?什么,如果在步骤 5 中,对等方没有向我发送任何数据,而是说,因为 FIN。将 select 仍然告诉我套接字在摘要中是可读的,

4

1 回答 1

2
  1. 现在会立即选择让我知道套接字是可读的吗?

是的。

什么,如果在步骤 5 中,对等方没有向我发送任何数据,而是说,因为 FIN。将选择仍然告诉我套接字是可读的

是的。

总之,问题是 select(或其任何变体,例如 epoll)是否指示套接字是可读的,如果在将套接字包含在受监视的文件描述符列表中之前套接字上有任何活动并假设应用程序没有从套接字读取数据

是的。

注意“在将套接字包含在受监视的文件描述符列表中之前”实际上并没有任何意义。操作系统不知道您何时执行此操作。它只知道你select()用那个名单打电话。

于 2013-08-30T09:43:57.357 回答