Skip to content

关于HttpServer中的IsKeepAlive()有点问题 #317

@BeeBiu

Description

@BeeBiu

抱歉,不小心按错了,https://github.com/ldcsaa/HP-Socket/issues/315,点到close,重新发了一个

`
template<class T, USHORT default_port> BOOL CHttpServerT<T, default_port>::SendResponse(CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc, const THeader lpHeaders[], int iHeaderCount, const BYTE* pData, int iLength)
{
WSABUF szBuffer[2];
CStringA strHeader;

::MakeStatusLine(m_enLocalVersion, usStatusCode, lpszDesc, strHeader);
::MakeHeaderLines(lpHeaders, iHeaderCount, nullptr, iLength, FALSE, IsKeepAlive(dwConnID), nullptr, 0, strHeader);
::MakeHttpPacket(strHeader, pData, iLength, szBuffer);

return SendPackets(dwConnID, szBuffer, 2);

}
`
我查看了 HP-Socket/Windows/Src/HttpServer.cpp的源码,发现MakeHeaderLines( IsKeepAlive(dwConnID), ); 处是用IsKeepAlive()检测的

但我测试发现这个值只能在比如OnHeadersComplete这类事件内部用,测试取出来的值是对的,事件外取出来的值是不同的(http1.0永远false,http1.1永远true)

因为我在OnHeadersComplete中把任务提交到另一个线程池里处理,处理完成后pSender->SendResponse回复请求时发现不管Connection带不带keep-alive值永远是close,然后我自己手动加了响应头才对,找到了半天才发现是IsKeepAlive()检测的值只能在事件内用,我想问一下这就是这么设计的吗,还是说httpserver再弄一个线程池来处理任务的方向就是错的,而是在OnHeadersComplete事件里处理,求解答


还有一个问题,我用Apache自带的测试程序,测试了官方自带的demo也是出现疑似内存泄漏的情况,Windows\Demo\TestEcho-Http是用vs2019编译的,之前一直以为是自己写的代码问题,内存占用随着测试次数的增加会随机一直增加,如图所示,等几小时也不会释放,不知是哪里出问题了

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions