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

Does WSASend() hide batching of large buffers?

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

不过,WSARecv() 一下子就把那个大缓冲区还给了它。

这有意义吗?

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

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

如果是这样的话,我希望我的应用程序总是发生这种情况。

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

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

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

这里指的是阻塞模式。非阻塞模式类似,只是有错误returns而不是上面的块