2

ここのいくつかの投稿に基づいて、Socket KeepAlive を設定するための次の簡単な方法を作成しましたが、うまくいくようです。2 つのサービス間の接続を切断するためにイーサネット ケーブルを抜いた後、ネットワーク ライブラリは SocketAsyncEventArgs Completed イベントで 0-bytes-transferred を処理し、Disconnected イベントを発生させることができます。

しかし、何らかの理由で、ミリ秒ではなく 100 分の 1 秒を使用する必要があります。これについて私が見つけることができるすべてのドキュメントは、ミリ秒を使用する必要があることを示しているようです。

(編集)返されたバイトがこれらの他の2つの方法と一致することを確認しました:

http://www.codeproject.com/Articles/117557/Set-Keep-Alive-Values

http://social.msdn.microsoft.com/Forums/en-US/35dfb50e-1e14-40c1-af01-f359be4d6a02/how-to-set-socket-keep-alive-timeinterval-values

(編集) これも WireSharked しており、間隔が 500 に設定されている場合、KeepAlive が 5 秒ごとに送信されていることを確認できます。

何を与える?最新バージョンの .NET で問題が発生しましたか?

private static byte[] GetKeepAliveOption(bool isEnabled, int keepAliveTime, int keepAliveInterval)
{
    //time and interval are in hundredths of a second to work properly
    //12 keepalive bytes, 1st 4 for enabled, next 4 for time, next 4 for interval
    byte[] bytes = new byte[12];

    if (isEnabled)
    {
        bytes[0] = 1;
    }

    byte[] keepAliveTimeBytes = BitConverter.GetBytes(KeepAliveTime);
    Buffer.BlockCopy(keepAliveTimeBytes, 0, bytes, 4, 4);

    byte[] keepAliveIntervalBytes = BitConverter.GetBytes(KeepAliveInterval);
    Buffer.BlockCopy(keepAliveIntervalBytes, 0, bytes, 8, 4);

    return bytes;
}
4

1 に答える 1