1. ホーム
  2. c#

[解決済み] C# ホストマシンのソフトウェアによって確立された接続が中止された

2022-03-04 23:41:25

質問内容

私のゲームサーバーで、このエラーが頻繁に起こるようになりました。サーバーの終了と再起動を繰り返しています。

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を使用し、送信タイムアウトと受信タイムアウトを使用していました。

ファイアウォールを無効にすると良いという意見がありましたが、これを実行するとゲームサーバー(専用サーバー)が攻撃を受けているかのように再起動するので、ファイアウォールは有効なままでなければなりません。

どなたか他の解決策をお持ちの方はいらっしゃいませんか?

追記: DDoS緩和サービスの背後にいるため、接続数を制限している可能性があります。

解決するには?

<ブロッククオート

確立された接続が、ホストマシンのソフトウェアによって中断された

これは定型のエラーメッセージで、Windowsから出力されます。 基本的なエラーコードはWSAECONNABORTEDです。 これは、「接続が中断されました」以上の意味を持ちません。 このフレーズの"your host machine"の部分には、少し注意が必要です。 Windowsアプリケーションプログラムの大部分において、接続を中断したのは、デスクトップアプリケーションが接続されているホストであることは確かです。 通常、どこかのサーバーです。

しかし、自分でサーバーを導入した場合は、役割が逆転します。 この場合、エラーメッセージは「相手側のアプリケーションによって中断された」と解釈する必要があります。 もちろん、サーバーを実装した場合、サーバーを使用するクライアントプログラムが何らかの理由で接続を中断することは珍しいことではありません。 それは できる ファイアウォールやプロキシが接続を終了させたということですが、そもそも接続を許可していないのが普通なので、その可能性はあまりありません。

接続が中断された理由は、相手側で何が起こっているのかを把握しない限り、本当のところはわかりません。 もちろん、それを知ることは困難です。 もし、あなたのサーバーがインターネット経由で到達可能なら、ポートスキャナによって探査されている可能性を無視してはいけません。 あるいは、ゲームのチートを探している顧客かもしれない。