我正在寻求帮助以了解以下情况: 1.我有一个TCP套接字连接建立了对等体。 2.我添加到要由select监视的文件描述符列表中 3.选择提醒我对套接字上的任何活动,我的应用程序处理套接字上对等方发送的数据。 4.我现在从select要监视的文件描述符列表中删除与套接字关联的文件描述符。 Peer在那个套接字上发给我一些数据。我不读这些数据。 6.几秒钟后,我再次将与套接字关联的文件描述符添加到要监视的文件描述符列表中 7.现在会立即选择让我知道套接字是否可读?什么,如果在步骤5中,对等体不发送任何数据,但是说,因为FIN。请问仍然会告诉我套接字是可读的 总之,问题是如果在将套接字包含在受监视文件描述符列表中并假设应用程序之前,如果套接字上有任何活动,则select(或其任何变体,如epoll)指示套接字是可读的已从套接字中读取数据
答案 0 :(得分:2)
- 现在会立即选择让我知道套接字是否可读?
醇>
是
如果在步骤5中,对等体不向我发送任何数据但是说,因为FIN。请问仍然会告诉我套接字是可读的
是
总之,问题是如果在将套接字包含在受监视文件描述符列表中并假设套接字之前,套接字上有任何活动,则select(或其任何变体,如epoll)是否指示套接字是可读的应用程序没有读取套接字中的数据
是
NB'在将监视文件描述符列表中包含套接字之前,并没有任何意义。操作系统不知道你什么时候这样做。它只知道您使用该列表调用了select()
。