void GTcpClt_LockClientList(void) { for(;;) { if(FALSE == GSock_InterlockedSet(bGTcpCltClientLock, TRUE, FALSE)) return; } }
void GTcpSvr_LockPendingAcceptList(void) { for(;;) { if(FALSE == GSock_InterlockedSet(bGTcpSvrPendingAcceptLock, TRUE, FALSE)) return; } }
void GTcpSvr_OnReadWriteError(PGHND_DATA pClient, PGIO_DATA pIoData) { if(GIO_WRITE_COMPLETED == pIoData->OperType) pfnOnGSockSendErrorSvr((DWORD)pClient, pIoData->cData, pIoData->WSABuf.len); GIoDat_Free(pIoData,__FUNCTION__); if(GHND_STATE_CONNECTED != GSock_InterlockedSet(pClient->hsState, GHND_STATE_DISCONNECT, GHND_STATE_CONNECTED)) return; GTcpSvr_DeleteClientList(pClient); GSock_InterlockedDec(PGHND_DATA(pClient->pOwner)->pData); pfnOnGSockDisconnectSvr((DWORD)pClient); if(GIO_CONNECTION_OVERFLOW == pIoData->OperType) { pfnOnGSockConnectionOverflow((DWORD)pClient); GSock_UninitTcpHndData(pClient); #if(_REUSED_SOCKET) GSock_InitTcpHndData(pClient); #endif GHndDat_Free(pClient); }else if(GIO_IDLE_OVERTIME == pIoData->OperType) { pfnOnGSockIdleOvertime((DWORD)pClient); GSock_UninitTcpHndData(pClient); #if(_REUSED_SOCKET) GSock_InitTcpHndData(pClient); #endif GHndDat_Free(pClient); }else if(GIO_CLOSE == pIoData->OperType) { GSock_UninitTcpHndData(pClient); #if(_REUSED_SOCKET) GSock_InitTcpHndData(pClient); #endif GHndDat_Free(pClient); }else { pfnOnGSockUnknownError((DWORD)pClient); #if(_REUSED_SOCKET) GTcpSvr_DisconnectEx(pClient); #else GSock_UninitTcpHndData(pClient); #endif GHndDat_Free(pClient); } }
void GTcpClt_OnReadWriteError(PGHND_DATA pClient, PGIO_DATA pIoData) { if(GIO_WRITE_COMPLETED == pIoData->OperType) pfnOnGSockSendErrorClt((DWORD)pClient, pIoData->cData, pIoData->WSABuf.len); GIoDat_Free(pIoData); if(GHND_STATE_CONNECTED != GSock_InterlockedSet(pClient->hsState, GHND_STATE_DISCONNECT, GHND_STATE_CONNECTED)) return; GTcpClt_DisconnectEx(pClient); pClient->dwTickCountAcitve = GetTickCount(); pfnOnGSockDisconnectClt((DWORD)pClient); }
void GTcpSvr_OnAcceptError(PGHND_DATA pListener, PGIO_DATA pIoData) { PGHND_DATA pClient = PGHND_DATA(pIoData->pOwner); GIoDat_Free(pIoData,__FUNCTION__); if(GHND_STATE_ACCEPTING != GSock_InterlockedSet(pClient->hsState, GHND_STATE_DISCONNECT, GHND_STATE_ACCEPTING)) return; GTcpSvr_DeletePendingAcceptList(pClient); if(GIO_CLOSE == pIoData->OperType) { GSock_UninitTcpHndData(pClient); GHndDat_Free(pClient); }else { #if(_REUSED_SOCKET) GTcpSvr_DisconnectEx(pClient); #else GSock_UninitTcpHndData(pClient); #endif GHndDat_Free(pClient); } }
void GTcpClt_UnlockClientList(void) { GSock_InterlockedSet(bGTcpCltClientLock, FALSE, TRUE); }
void GTcpSvr_UnlockPendingAcceptList(void) { GSock_InterlockedSet(bGTcpSvrPendingAcceptLock, FALSE, TRUE); }