每次客户端连接到我的服务器时,我想记录客户端和服务器之间的传输时间 - 有没有办法在不必ping客户端的情况下执行此操作。我的服务器是用C ++编写的,并在LAN TCP / IP套接字上侦听。我希望TCP / IP堆栈上有一些东西可以在每个客户端连接时使用。
更新
传输时间:客户端通过WAN / LAN等计算机网络连接服务器所用的毫秒数。基本上与从shell中正在运行的ping client1.example.com
获得的结果相同。
答案 0 :(得分:1)
没有完全可移植的方法来查找客户端设置连接所花费的时间,因为没有API可以查询内核以获取此信息。但是你有一些途径:
如果您可以在界面上捕获,则可以轻松测量从第一个SYN到ACK的时间。您应该能够在大多数系统上执行此操作。
在某些Unix系统上,您可以启用SO_DEBUG套接字选项,该选项可能会为您提供此信息。根据我的经验,SO_DEBUG很难使用。
答案 1 :(得分:1)
TCP API没有明确内置于您想要的内容,但假设您可以控制服务器和客户端,您可以执行以下操作:
当然这种方法将在测量中包括TCP协议的变幻莫测(例如,如果TCP数据包在从服务器到客户端的路上丢失,则需要在客户端看到之前重新传输数据包,并且这将增加测量时间)。这可能是您想要的,或者如果不是,您可以使用UDP数据包执行类似的操作(例如,让客户端发送UDP数据包并且服务器响应,然后客户端测量send()和recv()之间经过的时间) 。当然,使用UDP,您将不得不处理防火墙和NAT阻止数据包返回客户端等。