- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个关于 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
单独返回。
关于qt - WSARecv 和 WSABuf 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988168/
调用WSARecv()时,有没有可能不经过完成端口阶段,直接返回数据。在 WSARecv() 文档中,它针对 lpNumberOfBytesRecvd 参数说: A pointer to the nu
我正在使用 std::vector 来表示我的 per IO 数据结构中的缓冲区: struct PerIoData { WSAOVERLAPPED m_overlapped; SOC
我想要 WSARecv 的精度。 基本上,您似乎可以将函数与 WSABUF 数组一起使用。 1- 在重叠的 I/O 上下文中 WITHOUT 完成端口,假设我在具有 48 个 WSABUF 数组的数据
我目前正在开展一个项目,该项目需要在 IE 中挂接 TCP 发送和接收 API 以监控 TCP 数据。它在 IE9 和 IE10 上运行良好。但它停止在 IE11 上工作。经过一番研究,我发现IE11
我想了解 IOCP 如何与套接字一起工作。我需要了解它们是否是这样工作的: 我创建了一个完成端口,它只是一个队列,当某些操作完成时将接收通知,然后我将我的套接字与它相关联,然后我处理传入的通知。 现在
当我调用 WSARecv()(或另一个 Overlapped IO 函数)时,我可能会立即收到错误,或者当我调用 GetQueuedCompletionStatus() 时可能会收到错误出列一个完成数
我正在尝试实现一个使用 IOCompletionPort 从其客户端读取的服务器。我有一些与 this example 非常相似的东西. 如果我没理解错的话,这应该是我的设计: [主线程] 创建监听套
我正在使用 WSARecv 实现一个异步服务器。根据文档,WSARecv 可以立即返回 0。这最终仍会调用我的完成例程,我会在其中再次调用 WSARecv 以获取其余数据。如果没有更多数据可供抓取,我
我正在做一个涉及 Hook WSARecv 的项目.我知道如何 Hook 这个函数,我的意思是它就像 Hook 另一个函数一样。无论如何,困难的部分是当WSARecv用于执行重叠操作。这个想法是,当应
我有几个关于 WSARecv 的问题 问题一:我如何准确地确定我们必须分配给 WSABUF.len 的大小? 问题二:WSARecv 是否读取长度为 0 的数据? 例如。WSABUF.len = 0
我有几个关于 WSARecv 的问题 问题一:我如何准确地确定我们必须分配给 WSABUF.len 的大小? 问题二:WSARecv 是否读取长度为 0 的数据? 例如。WSABUF.len = 0
我的问题:我的 Completionport 服务器将从不同的客户端接收未知大小的数据,问题是,我不知道如何避免缓冲区溢出/如何避免我的(接收)缓冲区被数据“填满”。 现在进入问题:1) 如果我通过
希望你能帮帮我。 我正在尝试通过 TCP/IP 通过网络发送 1000 位的数据包,我希望也能够在 Cygwin 和 Windows 中使用重叠 I/O 技术。 在 Cygwin 中,我尝试使用“re
如何提高 WSARecv 的性能以尽快完成。 IT 使用重叠套接字和阻塞套接字。代码如下。 WSARecv(*socket, &Buffer, 1, &RecvCount, &Flag, NULL,
我在 Windows 上使用 IOCP。以前我使用方法 GetQueuedCompletionStatus 来轮询队列,一切都很好。但是当我决定重构逻辑以利用 WSARecv 调用完成例程时,它总是失
我需要弄清楚当 lpCompletionRoutine 为空时 WSARecv 如何使用 lpOverlapped 参数。它表示位于 lpOverlapped 的事件,对吧?但肯定不止于此。 我正在拦
我在 C++ 中挂接 WSASend 和 WSARecv,使用的方法与我用来挂接客户端的 WSASend 和 WSARecv 函数的方法相同。在客户端中,我能够从 WSASend/WSARecv 传递
documentation WSARecv() 说明了关于 lpNumberOfBytesRecvd 参数的以下内容: A pointer to the number, in bytes, of da
我在 Windows 中处理多线程 IOCP 服务器。为了避免处理许多挂起的读取,我总是在每个连接的套接字上只有一个 wsarecv 操作。简而言之,我的设计如下: 客户端连接后,wsarecv 被发
我想使用工作线程池和 IO 完成端口编写一个服务器。服务器应该在多个客户端之间处理和转发消息。 “每个客户”数据位于 ClientContext 类中。此类实例之间的数据使用工作线程进行交换。我认为这
我是一名优秀的程序员,十分优秀!