강의

멘토링

커뮤니티

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

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

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

Phiên gói

ProcessSend에 대해서 질문이 있습니다.

Viết

·

357

0

WRITE_LOCK; if (_sendQueue.empty()) _sendRegistered.store(false); else RegisterSend();
 
ProcessSend에서 WRITE_LOCK의 의미가 잘 이해가 되지 않습니다.
 
이미 큐에 대한 작업을 할 때 WRITE_LOCK을 일일이 잡아주고 있는데 ProcessSend에서 굳이 다시 락을 잡는 이유가 무엇인가요? 그리고 
 
Lock(); if (_sendQueue.empty()) _sendRegistered.store(false);
Unlock();
else
Unlock();
RegisterSend();
 
와 같이 락의 범위를 잡으니 패킷 유실이 발생하는데 이렇게 잡으면 안되는 이유를 전혀 모르겠습니다..

 

 

networkwindows-serverMMORPG

Câu trả lời 2

0

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

강사님 혹시 이런 것까지 여쭤봐도 될지 모르겠지만 혹시 wsasend에서 실패 후 wsagetlasterror 에러코드 10022 (WSAEINVAL )를 경험해보신 적이 있으신가요..? 에코서버를 돌리면서 어느 정도 시간이 지나면 세션 2개 정도가 위 에러가 뜨는데 혹시 경험해보신 적이 있으면 어떤 이유인지 여쭤볼 수 있을까요?

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

네트워크 프로그래밍을 할 때 에러는 하도 상황별로 많아서 
그냥 검색해보시면서 해야 합니다.

0

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

RegisterSend를 한다고 바로 ProcessSend가 호출되는건 아니고,
네트워크 전송이 완료되면 다른 쓰레드를 통해 ProcessSend가 호출될 수도 있기 때문입니다.

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

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

Đặt câu hỏi