E
ego
Unregistered / Unconfirmed
GUEST, unregistred user!
假设发送端发送了3个数据包,长度分别为128、64和32个字节。本地系统堆栈把这些数据聚合在一起,形成一个更大的数据包(共224个字节)。
在接收端,网络堆栈会把所有传入的数据聚集在一起。只要接收端一执行256字节缓冲区的recv调用,系统就会马上返回所有的224个字节。如果接收端只要求读取20个字节,则系统就只返回20个字节。
问题:当调用recv(s, buf, 20, 0)来读取缓冲区数据后:
1.已读取的20个字节是否仍在缓冲区中?
2.如果已读取的20个字节已被删除,那么剩下的204个字节是否仍在缓冲区中?
3.如果剩下的204个字节仍在缓冲区中,那么循环调用recv(s, buf, 20, 0)是否能够正确全部读取?
在接收端,网络堆栈会把所有传入的数据聚集在一起。只要接收端一执行256字节缓冲区的recv调用,系统就会马上返回所有的224个字节。如果接收端只要求读取20个字节,则系统就只返回20个字节。
问题:当调用recv(s, buf, 20, 0)来读取缓冲区数据后:
1.已读取的20个字节是否仍在缓冲区中?
2.如果已读取的20个字节已被删除,那么剩下的204个字节是否仍在缓冲区中?
3.如果剩下的204个字节仍在缓冲区中,那么循环调用recv(s, buf, 20, 0)是否能够正确全部读取?