System.ObjectDisposedException: Cannot access a disposed object 에러
2199
投稿した質問数 8
강의내용을 복습하며 Session 부분을 여러번 반복해서 만드는 도중
System.ObjectDisposedException: Cannot access a disposed object 에러가 발생하여 질문드립니다.
본 강의에서는 OnRecvComplited 함수에 Disconnect 함수를 추가하지 않으셨는데 (Session #2 첫 부분에서 추가하신 것은 확인하였습니다) Disconnect()가 두 번 실행되었을 경우를 대비하여 _disconnect 를 플래그로 세워 Interlocked.Exchange를 이용하니 에러가 사라졌습니다.
해당 에러는 연결이 끊긴 소켓에 접근할 경우 발생하는 것으로 파악하였습니다. 그렇다면 멀티쓰레드 환경에서 OnAcceptHandler와 OnRecvComplited에 포함된 Disconnect() 함수가 동시다발적으로 실행되면서 해당 오류가 발생한다고 보면 되는 것인가요?
+) 추가로 Socket.Close()를 통해 연결을 끊는다는 것을 소켓이 삭제되는 것이라고 봐도 무방한지 궁금합니다. 자료에도 소켓을 해제한다, 대기된 데이터를 삭제한다라는 표현만 사용되었고 소켓 자체를 삭제한다는 이야기는 없는 것 같아 질문드립니다.
감사합니다.
回答 2
1
네 기본적으로 C# 소켓 프로그래밍할 때
네트워크 관련 함수는 try-catch로 감싸서 그런 케이스에 방어를 해야 하는데
몇 군데가 누락되어 있을거에요.
소켓.Close()를 때리면 단순 메모리에서 해제하는 수준을 떠나
정말 네트워크 통신도 끊어버립니다.
관련되어 무슨 일이 일어나는지 세부적인 사항은 tcp/ip 관련 책을 보면 도움이 됩니다.
TLS 질문드립니다.
0
43
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
46
2
Unity Span
0
76
2
XML, Dll 차이점
0
105
2
Session 질문입니다
0
79
1
Write Read 커서 키워드
0
76
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
70
2
네트워크 Send 전담 스레드 배치
0
98
2
UnhandledException 으로 서버 터지는 경우
0
85
2
컨텐츠 단, 엔진 단
0
105
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
145
2
유니티6 버전
0
97
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
103
2
C++ 전혀 모르는데 C# 서버
0
169
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
95
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
61
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
191
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
82
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
106
1
스핀락 질문.
0
110
2

