Beispiel #1
0
void GTcpClt_LockClientList(void)
{
	for(;;)
	{
		if(FALSE == GSock_InterlockedSet(bGTcpCltClientLock, TRUE, FALSE))
			return;
	}
}
Beispiel #2
0
void GTcpSvr_LockPendingAcceptList(void)
{
	for(;;)
	{
		if(FALSE == GSock_InterlockedSet(bGTcpSvrPendingAcceptLock, TRUE, FALSE))
			return;
	}
}
Beispiel #3
0
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);
	}
	
}
Beispiel #4
0
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);
}
Beispiel #5
0
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);
	}
}
Beispiel #6
0
void GTcpClt_UnlockClientList(void)
{
	GSock_InterlockedSet(bGTcpCltClientLock, FALSE, TRUE);
}
Beispiel #7
0
void GTcpSvr_UnlockPendingAcceptList(void)
{
	GSock_InterlockedSet(bGTcpSvrPendingAcceptLock, FALSE, TRUE);
}