ANSC_STATUS
WebVhoDelGso
(
    ANSC_HANDLE                 hThisObject,
    ULONG                       ulSessionId,
    PUCHAR                      address,
    USHORT                      port
)
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PWEB_VIRTUAL_HOST_OBJECT        pMyObject    = (PWEB_VIRTUAL_HOST_OBJECT  )hThisObject;
    PWEB_VIRTUAL_HOST_PROPERTY      pProperty    = (PWEB_VIRTUAL_HOST_PROPERTY)&pMyObject->Property;
    PHTTP_HFP_INTERFACE             pHfpIf       = (PHTTP_HFP_INTERFACE       )pMyObject->hHfpIf;
    PWEB_LSM_INTERFACE              pLsmIf       = (PWEB_LSM_INTERFACE        )pMyObject->hLsmIf;
    PWEB_GENERAL_SESSION_OBJECT     pSession     = NULL;
    ULONG                           ulClientAddr = 0;
    PSINGLE_LINK_ENTRY              pSLinkEntry  = NULL;
    ULONG                           ulHashIndex  = AnscHashUlong(ulSessionId, WEB_VHO_GSO_TABLE_SIZE);

    AnscAcquireLock(&pMyObject->GsoTableLock);

    pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->GsoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pSession     = ACCESS_WEB_GENERAL_SESSION_OBJECT(pSLinkEntry);
        ulClientAddr = *(PULONG)pSession->GetClientAddr((ANSC_HANDLE)pSession);
        pSLinkEntry  = AnscSListGetNextEntry(pSLinkEntry);

        if ( (pSession->GetSessionId((ANSC_HANDLE)pSession) == ulSessionId           ) &&
                (ulClientAddr                                  == AnscReadUlong(address)) )
        {
            AnscSListPopEntryByLink(&pMyObject->GsoTable[ulHashIndex], &pSession->Linkage);

            pSession->AcquireAccess((ANSC_HANDLE)pSession);

            returnStatus =
                pLsmIf->EndSession
                (
                    pLsmIf->hOwnerContext,
                    (ANSC_HANDLE)pSession
                );

            pSession->ReleaseAccess((ANSC_HANDLE)pSession);
            pSession->Cancel       ((ANSC_HANDLE)pSession);
            pSession->Remove       ((ANSC_HANDLE)pSession);
        }
    }

    AnscReleaseLock(&pMyObject->GsoTableLock);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
WebVhoDelAllGsos
(
    ANSC_HANDLE                 hThisObject
)
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PWEB_VIRTUAL_HOST_OBJECT        pMyObject    = (PWEB_VIRTUAL_HOST_OBJECT  )hThisObject;
    PWEB_VIRTUAL_HOST_PROPERTY      pProperty    = (PWEB_VIRTUAL_HOST_PROPERTY)&pMyObject->Property;
    PHTTP_HFP_INTERFACE             pHfpIf       = (PHTTP_HFP_INTERFACE       )pMyObject->hHfpIf;
    PWEB_LSM_INTERFACE              pLsmIf       = (PWEB_LSM_INTERFACE        )pMyObject->hLsmIf;
    PWEB_GENERAL_SESSION_OBJECT     pSession     = NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry  = NULL;
    ULONG                           i            = 0;

    AnscAcquireLock(&pMyObject->GsoTableLock);

    for ( i = 0; i < WEB_VHO_GSO_TABLE_SIZE; i++ )
    {
        pSLinkEntry = AnscSListPopEntry(&pMyObject->GsoTable[i]);

        while ( pSLinkEntry )
        {
            pSession    = ACCESS_WEB_GENERAL_SESSION_OBJECT(pSLinkEntry);
            pSLinkEntry = AnscSListPopEntry(&pMyObject->GsoTable[i]);

            pSession->AcquireAccess((ANSC_HANDLE)pSession);

            returnStatus =
                pLsmIf->ExpireSession
                (
                    pLsmIf->hOwnerContext,
                    (ANSC_HANDLE)pSession
                );

            pSession->ReleaseAccess((ANSC_HANDLE)pSession);
            pSession->Cancel       ((ANSC_HANDLE)pSession);
            pSession->Remove       ((ANSC_HANDLE)pSession);
        }
    }

    AnscReleaseLock(&pMyObject->GsoTableLock);

    return  ANSC_STATUS_SUCCESS;
}