inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

WSAEventSelect 모델

-1리턴이 대부분입니다

529

iiclicu

작성한 질문수 6

0

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

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

무엇이 문제일까요?

windows-server MMORPG network

답변 4

0

BlockAll

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

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

해당 문제는 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

bigcat0815

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

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

0

Rookiss

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

0

Rookiss

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

0

iiclicu

WSAEWOULDBLOCK이 계속 뜹니다

Memory Pool에서 오버플로우 질문입니다.

0

64

2

포토폴리오 및 진로 관련하여 고민입니다.

0

112

1

포토폴리오 관련 고민입니다.

0

62

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

82

2

성능 테스트 결과

0

103

2

게임 서버 Stateful, Stateless 진로 고민

0

121

1

WaitOnAddress와 Sleep의 차이 질문

0

83

1

궁금한거 있습니다.

0

82

2

JobTimer 구동 스레드

0

107

2

TryPop() 동작 관련 질문

0

81

1

로드맵 C#서버 C++서버 방향성 질문

0

148

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

73

1

생명주기를 위한 의도적 복사

0

87

2

락프리의 실무에서 사용 질문

0

141

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

101

2

mutex와 sleep 차이점

0

118

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

152

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

96

1

공부법 관련해서

0

183

2

MakeShared 함수 관련

0

114

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

144

2

운영체제관련 질문입니다

0

131

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

117

2

메모리 풀 질문있습니다.

0

125

1