关于hpsocket中内存不断上涨的现象

发布于 2021-11-24 15:26:46 字数 456 浏览 729 评论 3

你好, CTcpServer::SendItem函数中,当PostSendNotCheck函数返回值为WSA_IO_PENDING,函数直接返回,而没有调用AddFreeBufferObj释放缓冲区。 由于调用发送数据的频率较快,PostSendNotCheck始终返回WSA_IO_PENDING,内存占用不断上涨。 WSA_IO_PENDING应该是表示此时TCP/IP层缓冲区已满,暂时没有剩余的空间将程序缓冲区的数据拷贝出来,这时系统将锁定用户的程序缓冲区,按照书上说的WSASend指定的缓冲区将会被锁定到系统的非分页内存中。直到TCP/IP层缓冲区有空余的地方来接受拷贝我们的程序缓冲区数据才拷贝走,并将给IOCP一个完成消息。 如果TCP/IP层缓冲区始终没有空余,随着数据不断发送,内存即不断上涨。 不知我的理解是否正确? 将pSocketObj->pending -= iBufferSize;移至if(result != WSA_IO_PENDING)里面是否可以?或者有其他处理方式?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

泛滥成性 2021-11-29 21:38:37

内存上涨是因为网络发送速度不及调用Send方法的速度。

参考HP-Socket开发文档,做下流控。

能否归途做我良人 2021-11-29 09:03:12

接收端是其他公司写的,用的不是完成端口,我也看不了代码。有办法快速屏蔽这个问题吗?

时光清浅 2021-11-27 21:03:22

这种情况你应该首先检查接收端

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文