⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapserversocket.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			PostQueuedCompletionStatus(g_hIOCP, 0, 0, NULL);
		}
	}

	CLOSEHANDLE(g_hIOCP);					// IOCP handle	

	SetEvent(m_hReadEventCompleted);	

	
	CLOSEEVENT(m_hReadEventCompleted);	
	CLOSESOCKET(m_SocketListen);			// Listen Socket	秦力
	
	//	--------------------------------------------------------------------------------
	//	秦寸 Memory俊辑 秦力 矫糯
	//
	//	-	荤侩磊 Memory甫 眠饶 昏力 矫糯 
	//	--------------------------------------------------------------------------------
	if( m_listConnection.GetCount() > 0 )
	{

		POSITION pos = m_listConnection.GetHeadPosition();

		while( pos )
		{
			_LPSOCKET_FD	pTempSocket = (_LPSOCKET_FD)m_listConnection.GetNext(pos);

			//	Memory啊 蜡瓤茄 版快
			if( !IsBadReadPtr( 	pTempSocket, sizeof(_SOCKET_FD) ) )
			{
				ReleaseSocketContext( pTempSocket );
			}
		}
	}

	if( m_listReadCompleted.GetCount() > 0 )
	{
		POSITION pos = m_listReadCompleted.GetHeadPosition();

		while( pos )
		{
			_LPPER_IO_CONTEXT	lpIOContext = (_LPPER_IO_CONTEXT)m_listReadCompleted.GetNext(pos);

			ReleaseIOContext(lpIOContext);
		}

	}

	m_listConnection.RemoveAll();	
	m_listReadCompleted.RemoveAll();

#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)

	if( m_listHackingConnection.GetCount() > 0 )
	{

		POSITION pos = m_listHackingConnection.GetHeadPosition();

		while( pos )
		{
			_LPSOCKET_FD	pTempSocket = (_LPSOCKET_FD)m_listHackingConnection.GetNext(pos);

			//	Memory啊 蜡瓤茄 版快
			if( !IsBadReadPtr( 	pTempSocket, sizeof(_SOCKET_FD) ) )
			{
				ReleaseSocketContext( pTempSocket );
			}
		}
	}

	m_listHackingConnection.RemoveAll();
#endif
	//	--------------------------------------------------------------------------------
	//	Memory Pool Delete
	//	--------------------------------------------------------------------------------


	SAFE_DELETE< CMemPool<_PER_IO_CONTEXT> > (&m_pSendIOPool) ;
	SAFE_DELETE< CMemPool<_PER_IO_CONTEXT> > (&m_pRecvIOPool) ;

#ifdef _DEBUG
	EndDialog(g_MainHwnd, 0 );
#else
	_Module.UnregisterServer();
#endif
}



////////////////////////////////////////////////////////////////////////////////////////
//	Function Pointer 涝仿
//
//
////////////////////////////////////////////////////////////////////////////////////////
void MapServerSocket::InitializeFP() 
{
	for(int i =0; i < DEF_MAXMAPACKET; i++ )
	{
		OnTransFunc[i].proc	= Packet_NoAction;
	}
		
	//	--------------------------------------------------------------------------------
	//	立加 包访
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_PLAYERIN_ASK					].proc	= Packet_PlayerIn;		
	OnTransFunc[ZP_START_ASK					].proc	= Packet_Start;			

	OnTransFunc[ZP_PLAYEROUT_ASK				].proc	= Packet_PlayerOut;			
	OnTransFunc[ZP_PCMOVE_ASK					].proc	= Packet_PCMove;				// 荤侩磊 某腐磐 捞悼 	

	OnTransFunc[ZP_PHYSICALATTACK_ASK			].proc	= Packet_AttackPhysical;		// PC/MONSTER傍拜 		
	OnTransFunc[ZP_ARCHERATTACK_ASK				].proc	= Packet_AttackArcher;			//	泵荐 劝 老馆 傍拜

	OnTransFunc[ZP_MOVEWARP_ASK					].proc	= Packet_MoveWarp;				//	纳腐 鉴埃 捞悼矫

	//	--------------------------------------------------------------------------------	
	//	眉泼 包访 Protocl
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_CHATMSG_ASK					].proc	= Packet_ChatMsg;				//	老馆 眉泼
	OnTransFunc[ZP_CHATWHISPER_ASK				].proc	= Packet_ChatWhisperMsg;		//	庇富 眉泼
	OnTransFunc[ZP_FINDPLAYER_ASK				].proc	= Packet_FindPlayer;			//	漂沥 荤侩磊 立加 蜡公 犬牢	
	OnTransFunc[ZP_EMOTICON_ASK					].proc	= Packet_Emoticon;				//	蜡历狼 捞葛萍能 悼累

	
	OnTransFunc[ZP_CELLHANDLE_ASK				].proc	= Packet_CellHandle;			//	漂沥 Object狼 沥焊 夸没	
	OnTransFunc[ZP_MOVEMAP_ASK					].proc	= Packet_MoveMap;				//	MAP 捞悼 矫 
	OnTransFunc[ZP_MOVEPOINT_ASK				].proc	= Packet_MovePoint;				//	泅犁 困摹 沥焊甫 (MAP Array俊 Update矫糯)
	
	//	--------------------------------------------------------------------------------	
	//	SKILL贸府 Protocol
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_SKILLATTACKREADY_ASK			].proc	= Packet_SkillAttackReady;		//	SKILL 霖厚 悼累		
	OnTransFunc[ZP_SKILLATTACK_ASK				].proc	= Packet_SkillAttack;			//	SKILL 荤侩 矫
	OnTransFunc[ZP_SKILLCHAINLIGHTING_ASK		].proc	= Packet_SkillChainLighting;	//	眉牢 扼捞飘醋 胶懦

	OnTransFunc[ZP_SKILLREACTPOINT_ASK			].proc	= Packet_SkillAttackReactPoint;	//	SKILL 痢 傍拜 矫 楷加 悼累 贸府
	OnTransFunc[ZP_SKILLENCHANT_ASK				].proc	= Packet_SkillEnchant;			//	牢镁飘 

	OnTransFunc[ZP_SKILLINSTANT_ASK				].proc	= Packet_SkillInstantEnchant;	//	鉴埃 矫傈
	
	OnTransFunc[ZP_SKILLINSTANTATTACK_ASK		].proc	= Packet_SkillInstantMoveAttack;//	鉴埃 捞悼 傍拜 //Jason 2004-05-13

	OnTransFunc[ZP_MONSTERSUMMON_ASK			].proc	= Packet_MonsterSummon;			//	家券

	OnTransFunc[ZP_SKILLENCHANTATTACK_ASK		].proc	= Packet_SkillEnchantAttack; //	牢镁飘 傍拜	
	

	//	--------------------------------------------------------------------------------	
	//	Inventory贸府 Protocol
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_INVENTORYACT_ASK				].proc	= Packet_InventoryAct;	
	OnTransFunc[ZP_INVENTORYADD_ASK				].proc	= Packet_InventoryItemAdd;		//	Inventory俊辑 酒捞袍 梅啊 矫虐扁 拱距

	//	--------------------------------------------------------------------------------	
	//	芒绊 包访 Protocol
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_DEPOSIT_ASK					].proc	= Packet_Deposit;			
	OnTransFunc[ZP_WITHDRAWAL_ASK				].proc	= Packet_Withdrawal;		
	OnTransFunc[ZP_CHANGEBANKLOCK_ASK			].proc	= Packet_ChangeBankLock;
	OnTransFunc[ZP_CHANGEBANKPASSWORD_ASK		].proc = Packet_ChangeBankPassword;
	
	//	--------------------------------------------------------------------------------	
	//	Item包访 贸府 Protocol		
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_ITEMTHROW_ASK				].proc	= Packet_ItemThrow;			//  Item阑 滚府绰 版快	
	OnTransFunc[ZP_ITEMPICKUP_ASK				].proc	= Packet_ItemPickUp;		//	Item   凛绰 版快 	
	OnTransFunc[ZP_ITEMUSE_ASK					].proc	= Packet_ItemUse;			//	Item阑 汗侩窍绰 版快
	OnTransFunc[ZP_ITEMBUY_ASK					].proc	= Packet_ItemBuy;			//	Item阑 荤绰 版快 
	OnTransFunc[ZP_ITEMSELL_ASK					].proc	= Packet_ItemSell;			//	Item阑 颇绰 版快  
	OnTransFunc[ZP_ITEMREFRESH_ASK				].proc	= Packet_ItemRefresh;		//	Item狼 困摹 沥焊甫 努扼捞攫飘俊 焊郴霖促.
	OnTransFunc[ZP_ITEMUPGRADE_ASK				].proc	= Packet_ItemUpgrade;		//	Item诀弊饭捞靛 


	OnTransFunc[ZP_MOVEZONE_ASK					].proc	= Packet_MoveZone;			//	PC 矫累 困摹 捞悼
	OnTransFunc[ZP_STATUP_ASK					].proc	= Packet_StatUp;			//	纳腐 STAT阑 刘啊 矫糯 

	//	--------------------------------------------------------------------------------	
	//	纳腐 SKILL 包访 悼累 
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_SKILLUP_ASK					].proc	= Packet_SkillUp;			//	SKILL UP
	OnTransFunc[ZP_SKILLDOWN_ASK				].proc	= Packet_SkillDown;			//	SKILL DOWN
	OnTransFunc[ZP_SKILLSLOTINSERT_ASK			].proc	= Packet_SkillSlotInsert;	// SKILL 窍窜 ICON殿废 
	OnTransFunc[ZP_SKILLSLOTDELETE_ASK			].proc	= Packet_SkillSlotDelete;	// SKILL 窍窜 ICON昏力 
	OnTransFunc[ZP_SKILLSLOTACTIVE_ASK			].proc	= Packet_SkillSlotActive;	// SKILL 窍窜 ICON 急琶 矫 
	OnTransFunc[ZP_SKILLCLEAR_ASK				].proc	= Packet_SkillDelete;		// SKILL 窍窜 ICON 急琶 矫 

	OnTransFunc[ZP_GUILDSKILLUP_ASK				].proc	= Packet_GuildSkillUp;			//	SKILL UP

	//	--------------------------------------------------------------------------------	
	//	TRADE贸府 Packet 
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_TRADEREQ_ASK					].proc	= Packet_TradeRequest;		//	芭贰 脚没 矫 
	OnTransFunc[ZP_TRADEACK_ASK					].proc	= Packet_TradeAck;	  
	OnTransFunc[ZP_TRADEMONEY_ASK				].proc	= Packet_TradeMoney;		//	芭贰 陛咀 涝仿 矫 
	OnTransFunc[ZP_TRADEOK_ASK					].proc	= Packet_TradeOK;			//	背券 滚瓢 努腐 矫
	OnTransFunc[ZP_TRADECANCEL_ASK				].proc	= Packet_TradeCancel;		//	背券 秒家 努腐 矫

	//	--------------------------------------------------------------------------------	
	//	颇萍 包访	Msg
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_PARTYJOINREQ_ASK				].proc	= Packet_PartyJoinRequest;	//	颇萍 脚没
	OnTransFunc[ZP_PARTYJOINANS_ASK				].proc	= Packet_PartyJoinAnswer;	//	颇萍 览翠
	OnTransFunc[ZP_PARTYLEAVE_ASK				].proc	= Packet_PartyLeave;		//	颇萍 呕硼/碍硼
	OnTransFunc[ZP_PARTYCHAT_ASK				].proc	= Packet_PartyChat;			//	颇萍 眉泼
	OnTransFunc[ZP_PARTYLIST_ASK				].proc	= Packet_PartyList;			//	颇萍 府胶飘

	//	--------------------------------------------------------------------------------	
	//	傍瘤 荤亲 Message 贸府	(眠饶 Control Message肺 捞包)
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZC_NOTICE_ASK					].proc	= Packet_Notice;		

	//	--------------------------------------------------------------------------------	
	//	霸烙 可记 殿废 
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_GAMEOPTION_ASK				].proc	= Packet_SetGameOption;		

	//	--------------------------------------------------------------------------------	
	//	GUILD 包访 
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZP_CREATEGUILD_ASK				].proc	= Packet_GuildCreate;		
	OnTransFunc[ZP_LEAVEGUILD_ASK				].proc	= Packet_GuildLeave;		
	OnTransFunc[ZP_DISBANDGUILD_ASK				].proc	= Packet_GuildRequestDisband;		
	OnTransFunc[ZP_GUILDMSG_ASK					].proc	= Packet_GuildMsg;	
	OnTransFunc[ZP_KICKMEMBER_ASK				].proc	= Packet_GuildKickMember;
	OnTransFunc[ZP_APPOINTMASTER_ASK			].proc	= Packet_GuildAppointMaster;		
	OnTransFunc[ZP_GUILDINFOR_ASK				].proc	= Packet_GuildInfor;		
	OnTransFunc[ZP_GUILDJOINREQ_ASK				].proc	= Packet_GuildJoinRequest;		
	OnTransFunc[ZP_GUILDJOINANS_ASK				].proc	= Packet_GuildJoinAnswer;		
	OnTransFunc[ZP_GUILDMARKCHANGE_ASK			].proc	= Packet_GuildMarkChange;
	
	OnTransFunc[ZP_GUILDMEMBER_ASK				].proc	= Packet_GuildMember;		
		
	//	--------------------------------------------------------------------------------	
	//	GM	COMMAND贸府 
	//	--------------------------------------------------------------------------------	
	OnTransFunc[ZG_SILENT_ASK					].proc	= PacketGM_Slient;			//	盲泼 陛攫 ON/OFF
	OnTransFunc[ZG_DISCONNECT_ASK				].proc	= PakcetGM_Disconnect;		//	漂沥 荤侩磊	立加 辆丰 贸府	
	OnTransFunc[ZG_FINDPLAYER_ASK				].proc	= PacketGM_FindPlayer;		//	漂沥 荤侩磊 茫扁 扁瓷 贸府 	
	OnTransFunc[ZG_MOVE_ASK						].proc	= PacketGM_Move;			//	漂沥 困摹 捞悼 扁瓷  	
	OnTransFunc[ZG_MOVEMAP_ASK					].proc	= PacketGM_MoveMap;			//	漂沥 MAP立加 扁瓷	  	
	OnTransFunc[ZG_TELEPORT_ASK					].proc	= PacketGM_TelePort;		//	漂沥 荤侩磊狼 困摹肺 捞悼  	
	OnTransFunc[ZG_SUMMON_ASK					].proc	= PacketGM_Summon;			//	漂沥 荤侩磊 家券	
	OnTransFunc[ZG_INVISIBLE_ASK				].proc	= PacketGM_Invisible;		//	款康磊 捧疙 纳腐拳 ON/OFF	
	OnTransFunc[ZG_NOTICE_ASK					].proc	= PacketGM_Notice;			//	款康磊 傍瘤 扁瓷 
	OnTransFunc[ZG_COMMAND_ASK					].proc	= PacketGM_Command;			//	疙飞 扁瓷	//Jason 2004-05-11 
			
	//	--------------------------------------------------------------------------------
	//	俺牢 惑痢
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_STALLOPEN_ASK				].proc	= Packet_StallOpen;			//	俺牢 惑痢 OPEN
	OnTransFunc[ZP_STALLCLOSE_ASK				].proc	= Packet_StallClose;		//	俺牢 惑痢 CLOSE

	OnTransFunc[ZP_STALLIN_ASK					].proc	= Packet_StallIn;			//	俺牢 惑痢 IN
	OnTransFunc[ZP_STALLOUT_ASK					].proc	= Packet_StallOut;			//	俺牢 惑痢 OUT

	OnTransFunc[ZP_STALLLIST_ASK				].proc	= Packet_StallList;			//	俺牢 惑痢 LIST
	OnTransFunc[ZP_STALLBUY_ASK					].proc	= Packet_StallBuy;			//	俺牢 惑痢 备概

	OnTransFunc[ZP_STALLITEMPRICEDOWN_ASK		].proc	= Packet_StallItemPriceDown;//	俺牢 惑痢 酒捞袍 啊拜 促款
	
	//	--------------------------------------------------------------------------------
	//	模备 扁瓷
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_FRIENDREGREQ_ASK				].proc	= Packet_FriendRegRequest;	
	OnTransFunc[ZP_FRIENDREGANS_ASK				].proc	= Packet_FriendRegAnswer ;
	OnTransFunc[ZP_FRIENDINFOR_ASK				].proc	= Packet_FriendInfor ;
	OnTransFunc[ZP_DISMISSFRIEND_ASK			].proc	= Packet_FriendDismiss ;

	//	--------------------------------------------------------------------------------
	//	荤捧厘 扁瓷 
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_FIGHTZONELIST_ASK			].proc	= Packet_FightzoneList ;
	OnTransFunc[ZP_PVPREQ_ASK					].proc	= Packet_PVPRequest ;
	OnTransFunc[ZP_PVPANS_ASK					].proc	= Packet_PVPAnswer ;
	OnTransFunc[ZP_PVPPRIZEMONEY_ASK			].proc	= Packet_PVPPrizeMoney;	 //	 陛咀 涝仿 矫 
	OnTransFunc[ZP_PVPPRIZEOK_ASK				].proc	= Packet_PVPPrizeOK;	 //	 OK 滚瓢 努腐 矫
	OnTransFunc[ZP_PVPPRIZECANCEL_ASK			].proc	= Packet_PVPPrizeCancel; //	 秒家 努腐 矫

	//	--------------------------------------------------------------------------------
	//	QUEST Function
	//	--------------------------------------------------------------------------------
	OnTransFunc[ZP_QUESTABANDON_ASK				].proc	=	Packet_QuestAbandon;
		
	OnTransFunc[ZP_QUESTTRIGGERONCLICK_ASK		].proc	=	Packet_QuestTriggerOnClick;
	OnTransFunc[ZP_QUESTTRIGGERONMSG_ASK		].proc	=	Packet_QuestTriggerOnMsg;	
	OnTransFunc[ZP_QUESTTRIGGERONKILL_ASK		].proc	=	Packet_QuestTriggerOnKill;

	OnTransFunc[ZP_QUESTTRIGGERONARRIVE_ASK		].proc	=	Packet_QuestTriggerOnArrive;		
	OnTransFunc[ZP_QUESTTRIGGERONDEPART_ASK		].proc	=	Packet_QuestTriggerOnDepart;


	OnTransFunc[ZP_QUESTTRIGGERONDIE_ASK		].proc	=	Packet_QuestTriggerOnDie;	
	OnTransFunc[ZP_QUESTTRIGGERONMISSIONSTOP_ASK].proc	=	Packet_QuestTriggerOnMissionStop;
	OnTransFunc[ZP_QUESTTRIGGERONRETURN_ASK		].proc	=	Packet_QuestTriggerOnReturn;


	//	--------------------------------------------------------------------------------
	//	ITEM SLOT
	//	Jason 2004-05-31
	//	--------------------------------------------------------------------------------

	OnTransFunc[ZP_ITEMSLOTINSERT_ASK			].proc	= Packet_ItemSlotInsert;	// ITEM 窍窜 ICON殿废 
	OnTransFunc[ZP_ITEMSLOTDELETE_ASK			].proc	= Packet_ItemSlotDelete;	// ITEM 窍窜 ICON昏力 

	OnTransFunc[ZP_SUMMONMONSTERCMD_ASK			].proc	= Packet_SummonMonsterCmd;	// ITEM 窍窜 ICON昏力 
	
#ifdef DEF_SECURITYPACKET
	OnTransFunc[ZP_SEED_ASK						].proc	= Packet_Seed;	
#endif
	

	OnTransFunc[ZP_NPCMENU_ASK					].proc	= Packet_NPCMenu;			//  NPC 皋春甫 楷促
#ifdef DEF_AUTHCODE
	OnTransFunc[ZP_NPCMENUAUTHCODE_ASK			].proc	= Packet_NPCMenuAuthCode;	//	牢刘 内靛 蔼阑 罐绰促.
#endif
	
	//
	//	力炼 盒秦 矫胶袍
	//
	//	-	Jason 2004-10-12
#ifdef DEF_PRODUCTION_DECOMPOSITON
	OnTransFunc[ZP_ESTIMATION_ASK				].proc	= Packet_AskEstimation;
	OnTransFunc[ZP_PRODUCEITEM_ASK				].proc	= Packet_ProduceItem ;
	OnTransFunc[ZP_DECOMPOSEITEM_ASK			].proc	= Packet_DecomposeItem ;	//	盒秦
#endif

	//////////////////////////////////////////////////////////////////
	//	GAMBLING 2004.10.26 by kuma
	//////////////////////////////////////////////////////////////////
	OnTransFunc[ZP_GAMBLING_ASK					].proc	= Packet_AskGambling;	
	OnTransFunc[ZP_GUILDNOTICESET_ASK			].proc	= Packet_GuildNoticeSet;	


#ifdef DEF_GUILDBANK	
	//
	//	辨靛 芒绊 包访 Function
	//
	OnTransFunc[ZP_NPCMENUCLOSE_ASK				].proc	= Packet_NPCMenuClose;
	OnTransFunc[ZP_GUILDBANKGOLDINOUT_ASK		].proc	= Packet_GuildBankGoldInOut;
	OnTransFunc[ZP_GUILDINVENTORYACT_ASK		].proc	= Packet_GuildInventoryAct;
#endif

#ifdef DEF_GUILDRANKDUB
	OnTransFunc[ZP_GUILDRANKDUB_ASK				].proc	= Packet_GuildRankDub;
#endif

#ifdef DEF_GUILDWAR
	OnTransFunc[ZP_GUILDWARREQ_ASK				].proc	= Packet_GuildWarRequest;
	OnTransFunc[ZP_GUILDWARANS_ASK				].proc	= Packet_GuildWarAnswer;
	
	OnTransFunc[ZP_GUILDARMISTICEREQ_ASK		].proc	= Packet_GuildArmisticensRequest;
	OnTransFunc[ZP_GUILDARMISTICEANS_ASK		].proc	= Packet_GuildArmisticensAnswer;

#endif
}

////////////////////////////////////////////////////////////////////////////////////////
//	Event Module Initialize
//
//	-	Initialize Critical Section
//	-	Memory allocation
//	-	Event Create
//	-	IOCP Create
////////////////////////////////////////////////////////////////////////////////////////
BOOL MapServerSocket::InitializeEvent()
{
	//	--------------------------------------------------------------------------------
	//	Memory Pool allocation	
	//	--------------------------------------------------------------------------------

	m_pSendIOPool = new CMemPool<_PER_IO_CONTEXT>(MAX_IO_CONTEXT);

	if( m_pSendIOPool == NULL )
	{
		ErrorMsg("memory alloc error .1= %d\n",GetLastError());
		return FALSE;
	}


	m_pRecvIOPool = new CMemPool<_PER_IO_CONTEXT>(MAX_IO_CONTEXT/10);

	if( m_pRecvIOPool == NULL )
	{
		ErrorMsg("memory alloc error .1= %d\n",GetLastError());
		return FALSE;
	}



	//	--------------------------------------------------------------------------------
	//	Create IO Completed 
	//	--------------------------------------------------------------------------------
	m_hReadEventCompleted = CreateEvent( NULL, FALSE, FALSE, NULL);

	if( !m_hReadEventCompleted )
	{
		ErrorMsg(TEXT("Error IOCompletedEvent Create. Error code = %d"),GetLastError());
		return FALSE;
	}

	//	--------------------------------------------------------------------------------
	//	IOCP Create
	//	--------------------------------------------------------------------------------


	g_hIOCP = CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, 0 );

	if( g_hIOCP == INVALID_HANDLE_VALUE )
	{

⌨️ 快捷键说明

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