套接字数据读取等待时间

时间:2015-07-17 22:38:24

标签: sockets select

我有应用程序,我正在使用select监听多个套接字。如果我开始处理从套接字A进来的请求,同时如果套接字B上的另一个请求到达,那么我想知道套接字B请求在我得到它之前必须等待多长时间。由于这是一个单线程应用程序,我无法生成新线程并返回select再次监视并立即从套接字B开始处理请求。

是否有' C' api可以获得这个指标或者这是不可能得到的?

1 个答案:

答案 0 :(得分:0)

如何测量“数据就绪”时间和“数据读取”时间之间的间隔没有直接的方法,因为没有任何时间戳与数据一起写入。此外情况更加复杂,因为面向流的套接字可能会接收多个数据段,直到选择关闭,而不是应该测量的间隔。

如果应用程序数据处理比内核中的数据包处理更长,您可以通过以下方式进行合理的测量:

  • 根据套接字B数据可用性选择唤醒时,根据应用程序协议打印当前时间和一些唯一数据ID。
  • 记录为套接字B接收的任何数据包。您可以使用网络流量捕获工具,如wireshark或tcpdump。或者,您可以使用目标-j LOG配置iptables防火墙规则(如果它在Linux上运行)。
  • 编写一个简单的脚本/程序,将捕获的数据包与应用程序日志相关联,并减去收到的数据并开始处理时间。

当然上面的想法确实忽略了内核处理时间。如果你真的需要确切的时间,我必须为你的应用程序引入一个新的线程。