gpt4 book ai didi

tcp - WSASend() 是否隐藏了大缓冲区的批处理?

转载 作者:可可西里 更新时间:2023-11-01 02:48:51 25 4
gpt4 key购买 nike

我现在正在测试大缓冲区,我在 WSABUF 中设置它,然后调用 WSASend()

不过,WSARecv() 只是一次性将它交回了那个大缓冲区。

这有意义吗?

对于大缓冲区,WSASend()WSARecv() 的限制在哪里?

似乎批处理是在后台进行的,所有这些都隐藏在抽象之后。

如果是这种情况,我希望我的应用程序始终发生这种情况。

最佳答案

限制分别是套接字发送和接收缓冲区大小。

WSASend() 在套接字发送缓冲区已满时阻塞,并在所有内容都已传输到套接字发送缓冲区时返回。同时,TCP 异步地从套接字发送缓冲区中移除数据,以一种您无法控制的方式将其转换为 TCP 段,并将这些段传递给 IP 层,IP 层又将它们转换为 IP 数据包,再次以一种您无法控制的方式你无法控制。

WSARecv() 在套接字接收缓冲区中没有数据时阻塞,并在套接字接收缓冲区中的所有数据都已传输到应用程序时返回,直到达到由应用。这可能只是一个再见,也可能是整个应用程序缓冲区,或者介于两者之间的任何东西,这完全取决于接收到的内容的粒度。

所有这些都是指阻塞模式。非阻塞模式类似,只是有错误返回而不是上面的阻塞。

关于tcp - WSASend() 是否隐藏了大缓冲区的批处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com