socket - stateobject c#



C#호스트 시스템의 소프트웨어에 의해 설정된 연결이 중단되었습니다. (1)

이러한 오류는 내 게임 서버에서 점점 더 자주 발생합니다. 그들은 서버가 닫히고 재시작하는 원인이되고 있습니다 ...

System.Net.Sockets.SocketException (0x80004005): An established connection was aborted by the software in your host machine 
   at System.Net.Sockets.Socket.BeginSend(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, AsyncCallback callback, Object state) 
   at iRP.Game.Sessions.Session.SendData(Byte[] Data)

이 오류가 생성되는 코드는 다음과 같습니다.

public void SendData(byte[] Data)
{
    try
    {
        if (mSocket == null)
        {
            //Output.WriteLine("[SND] Socket has a null exception, which means it is now invalid. Remove this socket!", OutputLevel.CriticalError);
        }
        else
        {
            mSocket.BeginSend(Data, 0, Data.Length, SocketFlags.None, sendCallback, mSocket);
        }
    }
    catch (Exception e)
    {
        string WhatToWrite = "Error handled (SESSION): " + e.ToString() + "\n\n" + e.Message + "\n\nStack: " + e.StackTrace + Environment.NewLine + "\n\n";
        File.AppendAllText(Environment.CurrentDirectory + "\\data\\fatal.txt", WhatToWrite);
        Program.Stop();
    }
}

버퍼 크기가 올바르게 설정되어 있고 소켓에서 KeepAlive를 사용하고 보내기 및 받기 제한 시간을 사용하고 있습니다.

사람들은 방화벽을 비활성화하면 도움이 될 것이라고 제안했지만, 이렇게 할 때마다 Game Server (Dedicated Server)가 공격 받고있는 것처럼 스스로 다시 시작되므로 방화벽을 계속 사용하도록 설정해야합니다.

다른 사람이 이것에 대한 다른 해결책이 있습니까?

추신 : 우리는 DDoS 완화 서비스를 통해 연결 수를 제한 할 수 있습니다 ...


호스트 시스템의 소프트웨어에 의해 설정된 연결이 중단되었습니다.

그건 보일러 - 플레이트 오류 메시지, 그것은 Windows에서 나온다. 기본 오류 코드는 WSAECONNABORTED입니다. 정말 "연결이 중단되었습니다"이상의 의미는 아닙니다. 당신은 문구의 "당신의 호스트 머신"부분에 대해 조심해야합니다. 대다수의 Windows 응용 프로그램에서 실제로 데스크톱 응용 프로그램이 연결된 호스트가 연결을 중단합니다. 보통 다른 곳의 서버.

그러나 자신의 서버를 구현할 때 역할은 반대가됩니다. 이제 오류 메시지를 "다른 와이어에서 응용 프로그램에 의해 중단됨"으로 읽어야합니다. 물론 서버를 구현할 때 드문 일이 아니며 서버를 사용하는 클라이언트 프로그램이 어떤 이유에서든 연결을 중단하지는 않습니다. 방화벽이나 프록시가 연결을 종료했음을 의미 할 수 있지만 일반적으로 연결이 처음부터 설정되지 않기 때문에 그렇게 할 가능성이 적습니다.

철사의 다른 끝에서 어떤 일이 벌어지고 있는지에 대한 통찰력이 없으면 왜 연결이 중단되었는지 알 수 없습니다. 그것은 물론 오기가 어렵습니다. 서버가 인터넷을 통해 연결될 수 있다면 포트 스캐너가 프로빙 중이라는 가능성을 할인하지 마십시오. 또는 게임 속임수를 찾는 고객.





network-programming