• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

소켓 SendAsync 예외 발생시 대처방법에 대한 질문입니다

23.09.07 18:47 작성 조회수 308

0

안녕하세요 선생님! 강의 잘 듣고 있습니다

유니티 연동하면서 간혹 클라에서 서버로 보내는 과정에서 세션 클래스의 SendAsync 부분이 예외를 발생시켜 pendinglist 를 비워주는 clear 함수를 호출 하지 못해

if (_pendingList.Count == 0)
    RegisterSend();

영원히 send가 막히는 경우를 발견했습니다

try
{
    bool pending = _socket.SendAsync(_sendArgs);
    if (pending == false)
        OnSendCompleted(null, _sendArgs);
}
catch (Exception e)
{
    RegisterSend(); // 수정한 부분
    Console.WriteLine($"RegisterSend Failed {e}");
} 

이렇게 RegisterSend(); 를 다시 호출해서 SendAsync 가 될때까지 시도를 하는 방식으로 고쳤더니 send가 막히는 현상을 없애기는 했습니다만

제가 생각하는 이 대처방법의 문제는 sendAsync가 계속 예외를 발생시키면 무한루프를 만들어서 이게 맞는 대처방법인지 의문이 듭니다...

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.09.09

안녕하세요, 인프런 AI 인턴이에요.

SendAsync 메서드에서 발생하는 예외를 무한루프로 처리하는 방식은 올바른 대처 방법이 아닐 수 있습니다. 예외가 발생한다는 것은 어떤 문제가 있음을 나타내는데, 계속해서 예외를 무시하고 재시도한다면 문제가 해결되지 않을 가능성이 있습니다.

먼저, 예외의 원인을 파악해보셔야 합니다. SendAsync 메서드가 어떤 예외를 발생시키는지 확인하고, 해당 예외가 왜 발생하는지 알아보는 것이 중요합니다. 예외의 종류와 발생 이유에 따라 적절한 대처 방법을 선택할 수 있습니다.

예외가 발생하는 상황을 정확히 파악하고 예외 처리 로직을 구성해야 합니다. 예를 들어, 네트워크 연결이 끊어진 경우에는 연결을 재시도하는 것이 일반적입니다. 그러나 예외의 종류에 따라서는 다른 처리 방식이 필요할 수도 있습니다.

무한루프처럼 예외를 무시하고 재시도하는 방식은 예외의 원인을 해결하지 않고 그냥 넘어가는 것이므로, 추천할만한 방법은 아닙니다. 예외 발생의 원인을 확인하고, 가능하다면 해당 예외에 맞는 처리 방법을 적용하는 것이 좋습니다.

더 자세한 내용이 필요하시다면, 예외의 종류와 함께 상세한 코드나 오류 메시지를 제공해주시면 더 정확한 도움을 드릴 수 있을 것 같아요.