Session의 함수 관련하여 질문드립니다.
144
작성한 질문수 35
강의 1회 완주한 뒤 코드를 복습하면서 의문이 생겼습니다.
Session 클래스의 void OnSendCompleted(object sender, SocketAsyncEventArgs args) 메소드관련 질문드립니다.
진한 글씨체로 되있는 부분에서 비동기 전송작업에서
전송요청한 패킷의 일부만 전송되고도 OnSendCompleted 메소드가 호출 될 수 있지 않나요?
만약 맞다면 _pendingList.Clear() 를 사용해서 버퍼를 다 비워버리는것이 아니라
추가 작업을 해줘야하는 것이 아닌지 궁금합니다.
void OnSendCompleted(object sender, SocketAsyncEventArgs args)
{
lock (_lock)
{
if (args.BytesTransferred > 0 && args.SocketError == SocketError.Success)
{
try
{
_sendArgs.BufferList = null;
_pendingList.Clear();
OnSend(_sendArgs.BytesTransferred);
if (_sendQueue.Count > 0)
RegisterSend();
}
catch (Exception e)
{
Console.WriteLine($"OnSendCompleted Failed {e}");
}
}
else
{
Disconnect();
}
}
}
답변 1
1
안녕하세요,
TCP가 비록 내부적으로는 데이터를 쪼개서 보낼 수 있다고는 하지만,
어플리케이션 레벨에서 호출하는 SendAsync의 완료 통지는
(일부가 아닌) 요청한 데이터 전체가 전송 완료 되었을 때 호출됩니다.
즉 1000바이트를 보낸다고 가정하면
받는 쪽에서는 200바이트씩 쪼개서 5번에 걸쳐 올 수 있기는 하지만,
SendAsync 완료 통지는 1000바이트가 다 보내졌을 때 호출이 됩니다.
따라서 굳이 사이즈 크로스 체킹을 할 필요는 없습니다.
TLS 질문드립니다.
0
40
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
46
2
Unity Span
0
75
2
XML, Dll 차이점
0
103
2
Session 질문입니다
0
78
1
Write Read 커서 키워드
0
72
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
69
2
네트워크 Send 전담 스레드 배치
0
97
2
UnhandledException 으로 서버 터지는 경우
0
84
2
컨텐츠 단, 엔진 단
0
103
1
질문 있습니다
0
76
2
C# 게임서버 3D MMORPG
0
143
2
유니티6 버전
0
96
2
receive하는 부분과 send하는 부분의 차이
0
132
2
커서의 위치의 중요성
0
102
2
C++ 전혀 모르는데 C# 서버
0
169
2
강의에 질문이 있습니다
0
85
2
멀티스레드 이해도 질문
0
94
1
500 vs 500
0
127
3
OnAcceptHandler 액션 함수
0
60
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
187
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
81
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
104
1
스핀락 질문.
0
109
2





