작성
·
264
답변 1
0
이해하신 것이 맞습니다.
초과해서 데이터를 사용하더라도 딱히 서버에서 체크를 하지 않기 때문에,
그리고 실제로 버퍼에 데이터는 12바이트가 있기 때문에
아무런 위화감 없이 통과되고 있는 것입니다.
ArraySegment는 실제 데이터를 조작하는 것은 아니고
배열의 영역을 '찝어주는' 개념입니다.
ArraySegment는 Array, Offset, Size 3개의 정보를 토대로 정보를 인지하는 것이고
Array 배열 전체가 유효 데이터가 아니고
offset부터 size만큼이 유효하다고 생각해야 합니다.
따라서 전체 데이터는 여전히 12바이트이지만,
Offset = 0, Size = 4로 내부적으로 넘겨준 상태이니
원래라면 Size = 4 를 초과해서 사용하면 안되는 것입니다.
아 제가 질문을 좀 잘못한 것 같습니다.
PacketSession의 OnRecvPacket을 하는 부분에서 BreakPoint를 잡고 실행해봤는데요, dataSize가 4기 때문에, RecvBuffer에 들어있는 데이터 중 앞의 4바이트 크기의 ArraySegment를 집어줘서 OnRecvPacket()으로 넘겨준다고 생각했습니다. 위에 dataSize도 4인 것으로 확인을 했구요.
그런데 F11로 다음 코드를 실행해보니 아래와 같이 OnRecvPacket()에 14바이트(?) 버퍼가 들어왔더라구요..? (12바이트도 아니고 14바이트라니...)
제가 이해한것으로 설명해보자면 OnRecvPacket()에는 4바이트짜리 버퍼만 들어와야 할 것 같은데 이 부분이 헷갈립니다ㅠㅠ