www.pudn.com > popmail.zip > SmartWSA.cpp


// SmartWSA.cpp: implementation of the CSmartWSA class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include  
#include  
 
#include "SmartWSA.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
//FD_SETSIZE=128 
CSmartWSA::CSmartWSA() 
{ 
	m_blIsInitialized = false; 
	Startup(); 
} 
 
CSmartWSA::~CSmartWSA() 
{ 
	Cleanup(); 
} 
 
 
//------------------------------------------------------------------- 
// Startup() 
//------------------------------------------------------------------- 
bool CSmartWSA::Startup() 
{ 
	WORD		wVersionRequested; 
	WSADATA		wsaData; 
	INT			iErr = 0; 
 
	if(IsInitialized()) 
		return true; 
	 
	wVersionRequested = MAKEWORD(SMARTWSA_VERSION_HI, SMARTWSA_VERSION_LOW); 
	 
	iErr = WSAStartup(wVersionRequested, &wsaData); 
	if(iErr != 0)  
	{ 
	// Tell the user that we could not find a usable WinSock DLL 
		//g_cLog << "WSAStartup() failed with code " << iErr << endl; 
		return false; 
	} 
// Confirm that the WinSock DLL supports 2.2. 
// Note that if the DLL supports versions greater	  
// than 2.2 in addition to 2.2, it will still return  
// 2.2 in wVersion since that is the version we requested 
	if(LOBYTE(wsaData.wVersion) != SMARTWSA_VERSION_LOW || HIBYTE(wsaData.wVersion) != SMARTWSA_VERSION_HI )  
	{ 
	// Tell the user that we could not find a usable WinSock DLL. 
		//g_cLog << "could not find a usable WinSock DLL, only next version may be used: " <<  LOBYTE(wsaData.wVersion)  
		//	 << "." << HIBYTE(wsaData.wVersion) << endl; 
		Cleanup(); 
		return false;  
	} 
// The WinSock DLL is acceptable. Proceed.  
	m_blIsInitialized = true; 
	return true; 
} 
 
 
//------------------------------------------------------------------- 
// Cleanup() 
//------------------------------------------------------------------- 
bool CSmartWSA::Cleanup() 
{ 
	if(IsInitialized() == false) 
		return true; 
	 
	if(WSACleanup() == SOCKET_ERROR) 
	{ 
		INT iErr = WSAGetLastError(); 
		//g_cLog << "WSACleanup() failed with code " << iErr << endl; 
		return false;  
	} 
 
	m_blIsInitialized = false; 
	return true; 
} 
 
 
//------------------------------------------------------------------- 
// IsInitialized() 
//------------------------------------------------------------------- 
bool CSmartWSA::IsInitialized() const 
{ 
	return m_blIsInitialized; 
}