SmartWSA.cpp
上传用户:liuzhunlcd
上传日期:2007-01-12
资源大小:54k
文件大小:2k
源码类别:

Email客户端

开发平台:

Visual C++

  1. // SmartWSA.cpp: implementation of the CSmartWSA class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include <wtypes.h>
  6. #include <iostream.h>
  7. #include "SmartWSA.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. //FD_SETSIZE=128
  12. CSmartWSA::CSmartWSA()
  13. {
  14. m_blIsInitialized = false;
  15. Startup();
  16. }
  17. CSmartWSA::~CSmartWSA()
  18. {
  19. Cleanup();
  20. }
  21. //-------------------------------------------------------------------
  22. // Startup()
  23. //-------------------------------------------------------------------
  24. bool CSmartWSA::Startup()
  25. {
  26. WORD wVersionRequested;
  27. WSADATA wsaData;
  28. INT iErr = 0;
  29. if(IsInitialized())
  30. return true;
  31. wVersionRequested = MAKEWORD(SMARTWSA_VERSION_HI, SMARTWSA_VERSION_LOW);
  32. iErr = WSAStartup(wVersionRequested, &wsaData);
  33. if(iErr != 0) 
  34. {
  35. // Tell the user that we could not find a usable WinSock DLL
  36. //g_cLog << "WSAStartup() failed with code " << iErr << endl;
  37. return false;
  38. }
  39. // Confirm that the WinSock DLL supports 2.2.
  40. // Note that if the DLL supports versions greater  
  41. // than 2.2 in addition to 2.2, it will still return 
  42. // 2.2 in wVersion since that is the version we requested
  43. if(LOBYTE(wsaData.wVersion) != SMARTWSA_VERSION_LOW || HIBYTE(wsaData.wVersion) != SMARTWSA_VERSION_HI ) 
  44. {
  45. // Tell the user that we could not find a usable WinSock DLL.
  46. //g_cLog << "could not find a usable WinSock DLL, only next version may be used: " <<  LOBYTE(wsaData.wVersion) 
  47. //  << "." << HIBYTE(wsaData.wVersion) << endl;
  48. Cleanup();
  49. return false; 
  50. }
  51. // The WinSock DLL is acceptable. Proceed. 
  52. m_blIsInitialized = true;
  53. return true;
  54. }
  55. //-------------------------------------------------------------------
  56. // Cleanup()
  57. //-------------------------------------------------------------------
  58. bool CSmartWSA::Cleanup()
  59. {
  60. if(IsInitialized() == false)
  61. return true;
  62. if(WSACleanup() == SOCKET_ERROR)
  63. {
  64. INT iErr = WSAGetLastError();
  65. //g_cLog << "WSACleanup() failed with code " << iErr << endl;
  66. return false; 
  67. }
  68. m_blIsInitialized = false;
  69. return true;
  70. }
  71. //-------------------------------------------------------------------
  72. // IsInitialized()
  73. //-------------------------------------------------------------------
  74. bool CSmartWSA::IsInitialized() const
  75. {
  76. return m_blIsInitialized;
  77. }