Question :: Packet) Recv Result : 0 ??
작성일20-04-30 04:30
조회 3,059
댓글 8
본문
서버에서 0x57에 관련된 패킷을 만들어서 보내며 처리할 때 (정확히는 클라이언트에서 서버를 선택한 경우)
왜 클라이언트에서 Recv값이 0으로 떨어지다가 다음 패킷을 받는 건지 아시는 분..?
로직 상 그런거면 어쩔 수 없이 따라가긴 하겠다만 그럴 듯한 이유가 있어야 납득을 하지 시발..클라년아
(해결 시 해당 글에 추가 함)
댓글 목록 8
M16님의 댓글


+1) 서버에서 Recv(...)의 값을 0으로 받는 경우는 보통 클라이언트에서 Closesocket(...)을 호출했을 때이다, 이는 클라이언트 측에서 접속을 끊었음을 의미한다.
보통 Recv의 반환 값에 대해서 0은 클라이언트의 종료를 의미하기 때문에 서버 측에서는 세션에 관한 정보, 소켓에 대한 핸들러 값들을 정리하는 것이 보통의 처리 로직이다. (보통 리소스를 반환한다라고 한다.)
허나, 5.50클라이언트에서 소켓에 대한 값을 정리하면 추가적으로 들어오는 패킷에 대한 정보를 받을 수 없고, 이것은 곧 더 이상의 처리가 불가함을 의미한다. (이후 계속..)
보통 Recv의 반환 값에 대해서 0은 클라이언트의 종료를 의미하기 때문에 서버 측에서는 세션에 관한 정보, 소켓에 대한 핸들러 값들을 정리하는 것이 보통의 처리 로직이다. (보통 리소스를 반환한다라고 한다.)
허나, 5.50클라이언트에서 소켓에 대한 값을 정리하면 추가적으로 들어오는 패킷에 대한 정보를 받을 수 없고, 이것은 곧 더 이상의 처리가 불가함을 의미한다. (이후 계속..)
M16님의 댓글


+1) 서버 리스트를 선택한 후에 클라이언트 측에서 Closesocket(...)를 호출하여 서버에게 Recv(...) 0 값을 반환하는 이유는 개인적으로 서버의 구성을 볼 때 로그인 서버와, 서버 리스트가 선택 된 서버(로비서버라고 칭함)는 다른 서버이기 때문일 것이다. (그것 말곤 이 병신같은 구조를 설명할 길이 없다. - 사실 많이 쓰는 방식이긴 하지만 함수의 호출 값을 보고 서버의 구성을 유추하는 것 자체가 말이... 코딱지를 손으로 튕겨 버리는 것은 보통의 방법이지만 이 튕겨져 나온 코딱지를 보고 이 코딱지가 나온 콧구멍의 구성을 유추하는 것과 비슷한 맥락의 병신짓이다.)
클라이언트의 접속 순서는 다음과 같다.
실행 -> 로그인 서버 접속 -> 서버 리스트 선택 -> 로그인 서버 접속 종료 -> 해당 서버로의 서버 접속(로비서버) -> 진행(...)
무튼 그렇다 ㅇㅇ.
클라이언트의 접속 순서는 다음과 같다.
실행 -> 로그인 서버 접속 -> 서버 리스트 선택 -> 로그인 서버 접속 종료 -> 해당 서버로의 서버 접속(로비서버) -> 진행(...)
무튼 그렇다 ㅇㅇ.
에비츄님의 댓글

음..... 뭔가 심오해보이기만 한다.... 머어어엉...
언더플로우님의 댓글


표현력 ㅆㅅㅌㅊ
공식과자님의 댓글

열심히시네요.. 대단쓰..
원숭이님의 댓글


ㅇㅇ맞음 그래서 transive 작업을 거쳐서 암호화값이랑 데이터 그대로 넘기는듯 (transive 중에 일련의 암호화값 데이터와 buffer로 값을 담아 넘기는데 버퍼 값을 응용하면 여러가지 가능)
도토리국밥님의 댓글

if(fd >= 0x10000)
{
closesocket(fd);
return 0;
}
이부분 말씀하시는건가요?;;
{
closesocket(fd);
return 0;
}
이부분 말씀하시는건가요?;;
M16님의 댓글


ㄴ