我正在查看send()的阻止調用,並查看是否有方法來測量功能花費的時間,同時能夠知道在此期間發生了什麼事件,以便可以對連接速度等進行定性分析。Winsock2.h發送的網絡模型(例如OSI)的哪一層返回?
因此,首先要了解的是函數在哪一層返回成功。
我正在查看send()的阻止調用,並查看是否有方法來測量功能花費的時間,同時能夠知道在此期間發生了什麼事件,以便可以對連接速度等進行定性分析。Winsock2.h發送的網絡模型(例如OSI)的哪一層返回?
因此,首先要了解的是函數在哪一層返回成功。
的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數據包,或者根據需要直接在網絡上塗抹。