0

我正在查看send()的阻塞调用,并查看是否有一种方法可以测量在函数中花费的时间,同时能够知道在此期间发生了什么事件,以便可以对连接速度等进行定性分析.

有了这个,首先要知道的是函数在哪一层返回成功。

4

1 回答 1

0

如果有足够的缓冲区空间可用于保存数据并且路由表仍然显示将数据包路由到对等方的方式,send()API 将几乎立即返回成功。(它实际上不必能够到达对等点——只是机器必须有一个可用的下一跳......)如果它需要等待缓冲区空间释放,它会。(使用Wireshark应该可以很容易地观察在线上被确认或发送的数据。)

顺便说一句,OSI 层并不完美地应用于 TCP/IP 协议族。第 1 层和第 2 层非常吻合,第 3 层大致是 IP 路由,第 4 层大致是 TCP、UDP、SCTP、ICMP 等。但是第 5、6、7 层没有真正的类似物——基于 TLS 的 SMTP 可能被认为是第 7 层,或者 SMTP 是第 7 层,而 TLS 是第 6 层……这一切很快就变得非常模糊。

只谈论您感兴趣的 TCP/IP 协议栈中的特定层会更容易。send()与流、数据报和原始套接字一起使用,因此它可以跨越堆栈的多个层——您可以使用它来发送 TCP、UDP、SCTP 或 ICMP 数据包,或者如果您愿意,可以直接在线上涂鸦。

于 2012-05-18T02:15:49.070 回答