据我所知,这个问题的答案是“是”,但我想检查我的理解并希望获得更详细、更深入的理解。
呼叫 和 的呼叫是否send
以 1:1 的比例对应recv
?
换句话说,如果一个程序调用通过网络套接字将一些数据发送到另一个网络连接的程序,那么在连接的接收端send
是否会有且仅有 1 个调用?(假设缓冲区足够大。)recv
recv
我知道操作系统和其他网络硬件可能会对 IP 数据包进行分段。但是,我的理解是,接收端的操作系统将重新组合分段的数据包,然后通过 向客户端应用程序呈现重新组合的数据包recv
。
询问的原因是我想弄清楚在某些情况下是否需要多次调用才能获取通过其他机器上的recv
调用发送的所有数据。send
之所以需要这样做,显而易见的原因是 因为send
发送的数据量超过了 使用的缓冲区所能容纳的数据量recv
。但是,为了回答这个问题,我们假设 发送的最大数据量send
可以容纳 使用的缓冲区recv
。