void CMonitor::OnGetStatus() 
{
	CString strName;
	int iMax = m_SockArray.GetSize();
	for (int iSelection = 0; iSelection < iMax; ++iSelection)
	{
		CString * pDataString = GetDataString(iSelection);
		CProgressCtrl * pProgressCtrl = GetProcessorProgressCtrl(iSelection);
		CProgressCtrl * pMemoryProgressCtrl = GetMemoryProgressCtrl(iSelection);
		*pDataString = "Getting Data";
		UpdateData(FALSE);
		SOCKET socket = m_SockArray[iSelection];
		if (socket)
		{
			int iReturn = 0;
			DWORD dwProcessor = 1;
			LONG lProcessorUsage = 0;
			LONG lMemoryUsage = 0;
			char Message[1024];
			pDataString = GetDataString(iSelection);

			if (!pDataString)
				ExitThread(0);

			iReturn = send(socket, (char*)&dwProcessor, sizeof(DWORD), 0);
			if (iReturn == SOCKET_ERROR)
			{
				iReturn  = WSAGetLastError();
				translate_WSAErrorCode(iReturn, Message);
				strcpy(pDataString->GetBuffer(256), "--");
				closesocket(socket);
				socket = 0;
				m_SockArray[iSelection] = socket;
			}

#define MAX_RETRIES 1500
			int iNameLength = 0;
			iReturn = 0;
			while (SOCKET_ERROR == recv(socket, (char*)&iNameLength, sizeof(int), 0))
			{
				if ((WSAGetLastError() != WSAEWOULDBLOCK))
				{
					closesocket(socket);
					socket = 0;
					m_SockArray[iSelection] = socket;
					iReturn = WSAGetLastError();
					break;
				}
				else
				{
					 if (iReturn == MAX_RETRIES+1)
					 {
						 break;
					 }
					++iReturn;
					Sleep(100);
				}
			}


			iReturn = 0;
			LPTSTR pNameString = strName.GetBuffer(iNameLength);
			
			while (SOCKET_ERROR == recv(socket, pNameString, iNameLength, 0))
			{
				if ((WSAGetLastError() != WSAEWOULDBLOCK))
				{
					closesocket(socket);
					socket = 0;
					m_SockArray[iSelection] = socket;
					iReturn = WSAGetLastError();
					break;
				}
				else
				{
					 if (iReturn == MAX_RETRIES+1)
					 {
						 break;
					 }
					++iReturn;
					Sleep(100);
				}
			}
			strName.ReleaseBuffer();
			CString * pStringName = GetString(iSelection);
			*pStringName = strName;

			iReturn = 0;

			while (SOCKET_ERROR == recv(socket, (char*)&lProcessorUsage, sizeof(LONG), 0))
			{
				if ((WSAGetLastError() != WSAEWOULDBLOCK))
				{
					closesocket(socket);
					socket = 0;
					m_SockArray[iSelection] = socket;
					iReturn = WSAGetLastError();
					break;
				}
				else
				{
					 if (iReturn == MAX_RETRIES+1)
					 {
						 break;
					 }
					++iReturn;
					Sleep(100);
				}
			}
			iReturn = 0;
			while (SOCKET_ERROR == recv(socket, (char*)&lMemoryUsage, sizeof(LONG), 0))
			{
				if ((WSAGetLastError() != WSAEWOULDBLOCK))
				{
					closesocket(socket);
					socket = 0;
					m_SockArray[iSelection] = socket;
					iReturn = WSAGetLastError();
					break;
				}
				else
				{
					 if (iReturn == MAX_RETRIES+1)
					 {
						 break;
					 }
					++iReturn;
					Sleep(100);
				}
			}
			

			if (iReturn == MAX_RETRIES+1)
				strcpy(pDataString->GetBuffer(256), "Failed");
			else
			{
				if ((lProcessorUsage > 100))
				{
					strcpy(pDataString->GetBuffer(256), "Closed");
					closesocket(socket);
					socket = 0;
				}
				else
				{
					if (socket)
					{
						sprintf(pDataString->GetBuffer(256), "%d%%", lProcessorUsage);
						if (pProgressCtrl)
							pProgressCtrl->SetPos(lProcessorUsage);
						if (pMemoryProgressCtrl)
							pMemoryProgressCtrl->SetPos(lMemoryUsage);
					}
					else
						sprintf(pDataString->GetBuffer(256), "WSA%d", iReturn);
				}
			}
			pDataString->ReleaseBuffer();
		}
	}
	UpdateData(FALSE);
}