20250529 개발일지. 버그 수정 진행.
점심쯤 옴
# 이벤트 발생 시점 확인
샌드 리시브 이벤트 발생 시점. 버퍼보다 큰 패킷, 버퍼보다 큰 모여진 패킷 보냈을 경우 어떻게 되는지
SendAsync 이벤트 -> 유저 버퍼에 있는 데이터를 커널 송신 버퍼에 이동이 완료됬을때(아직 전송이 되진 않음)
ReceiveAsync 이벤트 -> 커널 수신 버퍼에서 유저 버퍼로 데이터가 이동했을 때
버퍼보다 큰 모여진 패킷 보냈을 경우 어떻게 되는지 -> 커널 버퍼에서 가지고 있다가 유저 버퍼에 나눠서 이동
# 버그 수정
테스트 중 해당 에러가 발생. writePos가 마이너스가 됬는데 언제 무슨이유로 마이너스가 되었는지 모르겠다
System.ArgumentOutOfRangeException: 'Non-negative number required. (Parameter 'offset')'
-> 리시브 작업 후 리시브 버퍼 초기화 작업중 _writePos 계산을 잘못하여 에러 발생
# 버그 수정 2
500개 정도 더미 클라이언트로 실행중 해당 에러 발생.
System.InvalidOperationException: 'An asynchronous socket operation is already in progress using this SocketAsyncEventArgs instance.'
lock 스코프에 여러 스레드가 들어와도 우선순위가 없음 -> 대기를 먼저하고 있더라도 누가 먼저 실행될 지 모름
현재 메인 스레드에서 패킷 브로드캐스트 루프를 계속 돌고있음.
일반적으로 같은 세션 객체에서 ProcessSend() -> SendCompleted() -> ProcessSend() 순으로 실행될 것을 기대하고 실행하지만 만약 ProcessSend() -> ProcessSend() 로 실행될 경우 SendCompleted 이벤트 발생 전 Saea 객체를 건들여서 위와 같은 에러가 뜬 것으로 예상됨.
- 생각나는 해결 방법. 같은 세션 내 ProcessSend() -> SendCompleted() 메소드 순서를 보장(어떻게 해야하는지는 모름)
- 일단 메세지 샌드 등록하는 스레드가 샌드처리도 하도록 바꾸었는데 처리속도가 조금 느려진것같다
# 차후 작업 예정
프로토버프 적용 및 패킷 매니저와 핸들러 생성 자동화 진행