-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
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();
와 같이 락의 범위를 잡으니 패킷 유실이 발생하는데 이렇게 잡으면 안되는 이유를 전혀 모르겠습니다..
답변을 작성해보세요.
0
cckiz153
질문자2022.03.19
강사님 혹시 이런 것까지 여쭤봐도 될지 모르겠지만 혹시 wsasend에서 실패 후 wsagetlasterror 에러코드 10022 (WSAEINVAL )를 경험해보신 적이 있으신가요..? 에코서버를 돌리면서 어느 정도 시간이 지나면 세션 2개 정도가 위 에러가 뜨는데 혹시 경험해보신 적이 있으면 어떤 이유인지 여쭤볼 수 있을까요?
0
Rookiss
지식공유자2022.03.19
RegisterSend를 한다고 바로 ProcessSend가 호출되는건 아니고,
네트워크 전송이 완료되면 다른 쓰레드를 통해 ProcessSend가 호출될 수도 있기 때문입니다.
답변 2