warsocketengine.cpp

来自「ftpserver very good sample」· C++ 代码 · 共 132 行

CPP
132
字号
#include "StdAfx.h"#include "WarSocketEngine.h"   // class implemented#ifndef WAR_LOG_H#   include "WarLog.h"#endif#ifndef WAR_SOCKET_IO_H#   include "WarSocketIo.h"#endif#ifndef WAR_ASSERT_H_INCLUDED#   define WAR_ASSERT_H_INCLUDED#   include <assert.h>#endif#ifndef WAR_AUTO_LOCK_H#   include "WarAutoLock.h"#endif#define AUTO_LOCK WarAutoLock MyLock(mLock);/////////////////////////////// PUBLIC ///////////////////////////////////////WarSocketEngine *WarSocketEngine::mpShared; //============================= LIFECYCLE ====================================WarSocketEngine::WarSocketEngine(): mCurrSeqNumber(0),mNumSocketsInUse(0){    WarLog info_log(WARLOG_INFO, "WarSocketEngine::WarSocketEngine()");    if (mpShared == NULL)    {        info_log << "Initializing shared socket subsystem";        mpShared = this;    }    #if HAVE_WINSOCK    WSADATA wsaData;     if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0)    {        WarLog err_log(WARLOG_ERROR, "WarSocketEngine::WarSocketEngine()");        WarError sys_err;        sys_err.Capture();        err_log << "Failed to initialize Winsock!"             << sys_err            << war_endl;        WarThrow(sys_err, NULL);    }    if (IsShared())        info_log << ' '            << wsaData.szDescription            << ' '            << wsaData.szSystemStatus;#endif // HAVE_WINSOCK    if (IsShared())        info_log << war_endl;}// WarSocketEngineWarSocketEngine::~WarSocketEngine(){    WarLog debug_log(WARLOG_DEBUG, "WarSocketEngine::~WarSocketEngine()");    if (mpShared == this)    {        debug_log << "Shutting down shared socket subsystem"             << war_endl;        mpShared = NULL;    }#if HAVE_WINSOCK    ::WSACleanup();#endif}// ~WarSocketEngine//============================= OPERATORS ====================================//============================= OPERATIONS ===================================size_t WarSocketEngine::GetNumberOfCurrentSockets()    throw(WarException){    WarSocketEngine& rglobal_engine = GetSharedEngine();    WarAutoLock my_lock(rglobal_engine.mLock);    return rglobal_engine.mNumSocketsInUse;}void WarSocketEngine::RegisterSocket(WarSocketIo *pSocket)    throw(WarException){    WarSocketEngine& rglobal_engine = GetSharedEngine();    WarAutoLock my_lock(rglobal_engine.mLock);    rglobal_engine.mNumSocketsInUse++;    pSocket->mSeqNumber = ++rglobal_engine.mCurrSeqNumber;}void WarSocketEngine::UnregisterSocket(WarSocketIo *pSocket)    throw(WarException){    WarSocketEngine& rglobal_engine = GetSharedEngine();    WarAutoLock my_lock(rglobal_engine.mLock);        assert(rglobal_engine.mNumSocketsInUse > 0);    rglobal_engine.mNumSocketsInUse--;}//============================= ACCESS     ===================================//============================= INQUIRY    ===================================/////////////////////////////// PROTECTED  ////////////////////////////////////////////////////////////////// PRIVATE    ///////////////////////////////////

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?