🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

22.03.18 20:07 작성 조회수 179

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();
 
와 같이 락의 범위를 잡으니 패킷 유실이 발생하는데 이렇게 잡으면 안되는 이유를 전혀 모르겠습니다..

 

 

답변 2

·

답변을 작성해보세요.

0

cckiz153님의 프로필

cckiz153

질문자

2022.03.19

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

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

0

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

채널톡 아이콘