WSASend() 是否隐藏了大缓冲区的批处理?
Does WSASend() hide batching of large buffers?
我现在正在测试大缓冲区,我在 WSABUF 中设置它,然后调用 WSASend()
。
不过,WSARecv()
一下子就把那个大缓冲区还给了它。
这有意义吗?
WSASend()
和 WSARecv()
对于大缓冲区的限制在哪里?
似乎批处理是在后台进行的,所有这些都隐藏在抽象之后。
如果是这样的话,我希望我的应用程序总是发生这种情况。
限制分别是套接字发送和接收缓冲区大小。
WSASend()
在套接字发送缓冲区已满时阻塞,returns 当所有内容都已传输到套接字发送缓冲区时阻塞。同时,TCP 异步地从套接字发送缓冲区中移除数据,以一种您无法控制的方式将其转换为 TCP 段,并将这些段传递给 IP 层,IP 层又将它们转换为 IP 数据包,再次以一种您无法控制的方式你无法控制。
WSARecv()
当套接字接收缓冲区中没有数据时阻塞,returns 当套接字接收缓冲区中的所有数据都已传输到应用程序时,直到达到由提供的限制应用程序。这可能是一个再见,或整个应用程序缓冲区,或介于两者之间的任何东西,完全取决于接收到的内容的粒度。
这里指的是阻塞模式。非阻塞模式类似,只是有错误returns而不是上面的块
我现在正在测试大缓冲区,我在 WSABUF 中设置它,然后调用 WSASend()
。
不过,WSARecv()
一下子就把那个大缓冲区还给了它。
这有意义吗?
WSASend()
和 WSARecv()
对于大缓冲区的限制在哪里?
似乎批处理是在后台进行的,所有这些都隐藏在抽象之后。
如果是这样的话,我希望我的应用程序总是发生这种情况。
限制分别是套接字发送和接收缓冲区大小。
WSASend()
在套接字发送缓冲区已满时阻塞,returns 当所有内容都已传输到套接字发送缓冲区时阻塞。同时,TCP 异步地从套接字发送缓冲区中移除数据,以一种您无法控制的方式将其转换为 TCP 段,并将这些段传递给 IP 层,IP 层又将它们转换为 IP 数据包,再次以一种您无法控制的方式你无法控制。
WSARecv()
当套接字接收缓冲区中没有数据时阻塞,returns 当套接字接收缓冲区中的所有数据都已传输到应用程序时,直到达到由提供的限制应用程序。这可能是一个再见,或整个应用程序缓冲区,或介于两者之间的任何东西,完全取决于接收到的内容的粒度。
这里指的是阻塞模式。非阻塞模式类似,只是有错误returns而不是上面的块