【发布时间】:2016-05-10 23:56:59
【问题描述】:
我的 C 程序使用 TCP 套接字 进行通信。
我正在使用迭代服务器和select() 来监听多个文件描述符;每个客户端一个 TCP 套接字文件描述符。
有没有一种方法,我可以使用它来确定文件描述符何时准备就绪?
该应用程序适用于 linux 平台。
应用程序是这样的:
我有一组文件描述符 {fd1, fd2, ... fdN}
while (True)
S <-- select (fd1, fd2, ... fdN) // Set S contains the ready fds
S = {fd1, fd2, fd3}.
/* Say only the file descriptors fd1, fd2 and fd3 are ready.
* I want to process in FIFO order.
* Hence, I need timestamp at which a file descriptor became ready.*/
process (S) /* It may take 2-3 minutes. Which is not negligible.
* Say t units for generalization.*/
注意,由于处理文件描述符需要t个单位,所以集合S中两个文件描述符的就绪时间之间的最大差异 可以是 t 个单位。
因此,文件描述符准备就绪的时间变得很重要。
我想知道如何获得文件描述符准备就绪的时间戳。
【问题讨论】:
-
@LPs 你在说什么?每个接受的连接都以新套接字的形式返回。
-
@LPs 没有理由相信 OP 会这样做——而且无论哪种方式,它都可能与问题无关。根据描述,他正在以非常标准和直接的方式实现带有 select() 循环的服务器。 accept() 创建一个文件描述符,每个客户端都有一个。
-
@LPs 如果有没有
accept()和connect()使用TCP 套接字的方法,我在30 年的网络编程中还没有遇到过。 -
@EJP 我的错。我说的是 UDP 套接字(SOCK_DGRAM)。
-
大家好。抱歉,迟到的评论。我的问题的一个例子:假设文件描述符 fd1 和 fd2 已经准备好。现在我调用select()。它会返回说 fd1 和 fd2 准备就绪。有没有办法找出哪个文件描述符首先准备好?文件描述符的数量可以超过 2 个。
标签: c linux sockets select tcp