Socket Server code: AcceptEx server memory leak
The latest version of The Server Framework contains a memory leak in the CSocketServerEx
class. It’s quite a good leak, it leaks an IO buffer on every connection attempt. The fix is as follows:
Change this code:
void CStreamSocketServerEx::PostAcceptRequest()
{
if (m_listeningSocket != INVALID_SOCKET)
{
if (m_connectionLimiter.CanCreateConnection())
{
IncrementPendingReceives();
const IFullAddress &address = GetAddress();
IStreamSocketEx *pSocket = AllocateSocket(CreateSocket(address.Type())).Detach();
IBuffer *pBuffer = AllocateBuffer();
pBuffer->SetUserPtr(m_socketIndex, pSocket);
PostIoOperation(pBuffer, IO_Accept_Request);
}
else
to this:
void CStreamSocketServerEx::PostAcceptRequest()
{
if (m_listeningSocket != INVALID_SOCKET)
{
if (m_connectionLimiter.CanCreateConnection())
{
IncrementPendingReceives();
const IFullAddress &address = GetAddress();
IStreamSocketEx *pSocket = AllocateSocket(CreateSocket(address.Type())).Detach();
CSmartBuffer buffer(AllocateBuffer());
buffer.Get()->SetUserPtr(m_socketIndex, pSocket);
PostIoOperation(buffer.Get(), IO_Accept_Request);
}
else