gpt4 book ai didi

qt - WSARecv 和 WSABuf 问题

转载 作者:行者123 更新时间:2023-12-02 15:41:24 24 4
gpt4 key购买 nike

我有几个关于 WSARecv 的问题

问题一:我如何准确地确定我们必须分配给 WSABUF.len 的大小?

问题二:WSARecv 是否读取长度为 0 的数据?

例如。WSABUF.len = 0

我想用那个来判断是否所有的包都发完了

问题 3:如果我理解正确,lpNumberOfBytesRecvd 包含实际读取的字节数而不是 WSABUF.len,对吗?

谢谢。

最佳答案

1) WSABUF.len 是您提供的缓冲区的长度。这是这次调用中可以读取的最大数量。您知道这个大小,因为它是您为 WSABUF.buf 指向的缓冲区分配的内存大小。

2) 在某些具有数千个并发连接的高性能情况下,当使用异步 I/O 时,您可以将 WSABUF.len 值设置为 0 以防止读取除了完成之外做任何事情告诉你数据可用。这是一种很少需要的性能调整,通常称为“零字节读取”。它有用的原因是它意味着 I/O 系统不需要锁定内存中的读取缓冲区(没有读取缓冲区),因此这减少了锁定的 I/O 页数。可以锁定的 I/O 页面数量有固定限制,因此当您有数千个连接但它们不经常发送数据时,这会很有用。您在所有连接上发布一个零字节读取,然后在零字节读取完成并且您知道您有可用数据时发布一个真正的读取。

3) 是的。实际读取的字节数通过lpNumberOfBytesRecvd单独返回。

您可能应该考虑消息框架(我谈论的是 herehere,因为这将帮助您了解您希望在给定时间从连接读取多少数据。

关于qt - WSARecv 和 WSABuf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988168/

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