강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của iiclicu1230407
iiclicu1230407

câu hỏi đã được viết

[Tuyển tập phát triển game MMORPG bằng C++ và Unreal] Phần 4: Máy chủ game

Mô hình WSAEventSelect

-1리턴이 대부분입니다

Viết

·

514

0

최종적에서 Recv가 정상적으로 처리되는것보다 -1로 리턴되는경우가 대부분입니다.

코드를 다운받아서 해봐도 어떨때는 정상적으로 되다가 다시작동하면 -1이 리턴되길 반복합니다.

무엇이 문제일까요?

windows-serverMMORPGnetwork

Câu trả lời 4

0

저도 똑같은 증상을 겪었습니다. 그래서 좀 더 자세히 코드를 분석한 결과 문제점을 찾을 수 있었습니다.

지금은 많이 늦긴하지만 똑같은 증상을 겪는 분이 있을까봐 댓글 남깁니다.

해당 문제는 Client Session 소켓 체크에서 FD_READ와 FD_WRITE를 동시에 처리하여 발생한 문제 같습니다.

때문에 FD_WRITE는 항상 참이되어 첫번째 루프에서 Read Buffer가 0 이라도 해당 조건문으로 들어와 recv()를 호출하게 됩니다.

하지만 ReadBuffer가 0 임으로 반환값을 -1이 되고

해당 소켓의 s.recvByte = -1 이 되어, 다음 루프부터 recv()가 있는 if(s.recvByte == 0) 조건문이 거짓이 되어 더이상 recv()를 못하는 상황이 된것이 문제입니다.


그래서 저는 if(s.recvByte == 0 && networkEvents.lNetworkEvents & FD_READ) 이렇게 수정하여 정상작동 하였습니다.

0

오래전 질문이라 해결 하셨는지 모르겠지만

클라이언트 쪽 마지막의 sleep을 주석처리 하시면 아마 작동 할 듯 싶습니다.

0

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

논블로킹 소켓에서 그 에러는 '딱히' 에러는 아닙니다.
recv 요청을 때렸는데 아직 데이터가 안왔거나 하는 상황에서 뜹니다.

0

Rookiss님의 프로필 이미지
Rookiss
Người chia sẻ kiến thức

네트워크쪽은 일어날 수 있는 문제의 경우의 수가 너무 많아
위 내용으로는 저도 알 수 없습니다.
에러 코드를 로그로 찍어보고, 몇번이 나오는지 확인이 필요합니다. (WSAGetLastError 등)

iiclicu님의 프로필 이미지
iiclicu
Người đặt câu hỏi

WSAEWOULDBLOCK이 계속 뜹니다

Hình ảnh hồ sơ của iiclicu1230407
iiclicu1230407

câu hỏi đã được viết

Đặt câu hỏi