zeliard / EasyGameServer

Game server framework for cocos2d-x

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

new Client Problem

namse opened this issue · comments

Sock 이 132인 ClientSession이 disconnect 되었습니다,
하지만 refCount가 아직 0이 아니여서 ClientManager의 mClientList에서 바로 지워지지 않습니다 ( 해당 부분 : ClientManager :: CollectGarbageSessions)

disconnect된 즉시 클라측에서 접속을 해보았습니다.
그때 할당된 소켓의 번호가 132이었습니다.
그래서 아직 mClientList[132]가 지워지지 않는데, 또 132번의 소켓넘버를 가진 clientSession이 mClientList에 inesrt되었습니다.

현재 mClientList는 map(Dictionary), non multi value라서 이미 132의 값이 있어서 insert가 무시된 것 같습니다.
그 직후 RefCount가 0이 된 132의 session이 CollectGarbageSessions에 의해 제거되어서 mClintList.count가 0이 되었습니다.

요약 : 매우 짧은 시간에 재접속 했을 경우 같은 소켓번호로 들어온 ClintSession이 Manage되지 못하고 댕글링 포인터가 됨

dlakwwkd/CommitAgain@c9bc8d4
이렇게 해결해보았는데 괜찮은가요?

유령세션 처리는 직접 해야함.