void STNetEngine::NotifyOnClose(STNetConnect *pConnect) { if ( 0 == AtomAdd(&pConnect->m_nDoCloseWorkCount, 1) )//只有1个线程执行OnClose,且仅执行1次 { SetServerClose(pConnect);//连接的服务断开 m_pNetServer->OnCloseConnect( pConnect->m_host ); } }
void* NetEngine::CloseWorker( NetConnect *pConnect ) { SetServerClose(pConnect);//连接的服务断开 m_pNetServer->OnCloseConnect( pConnect->m_host ); /* 以下pConnect->GetSocket()->Close();操作 是V1.51版中,从CloseConnect( ConnectList::iterator it )中移动过来 推迟执行close 确保业务层完成close业务后,系统才可以再利用socket句柄 详细原因,参考CloseConnect( ConnectList::iterator it )中注释 */ pConnect->GetSocket()->Close(); pConnect->Release();//使用完毕释放共享对象 return 0; }