linux select()如何工作?

时间:2014-12-10 15:59:02

标签: linux sockets select

有人可以解释select()对我的影响吗?我有一个错误的心理模型,并且不会在手册页中理解它。

如果我有多个套接字连接到不同服务器的客户端,并且我正在定期从服务器读取一些信息,内核如何知道要读取哪个套接字标记?他怎么知道哪个套接字read()不会阻塞?我认为如果它实际上不从服务器读取数据是不可预测的。

1 个答案:

答案 0 :(得分:3)

内核不会预测任何事情。它告诉你套接字接收缓冲区的当前状态。如果缓冲区不为空,则套接字是可读的。如果缓冲区为空,则select()等待。当数据包从服务器到达时,内核会使用IP地址,协议和端口号将其与正确的套接字进行匹配。数据包被放入套接字的接收队列,并通知select()状态已更改。