关于hpsocket中内存不断上涨的现象
你好, 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
内存上涨是因为网络发送速度不及调用Send方法的速度。
参考HP-Socket开发文档,做下流控。
接收端是其他公司写的,用的不是完成端口,我也看不了代码。有办法快速屏蔽这个问题吗?
这种情况你应该首先检查接收端