私はこのトピックについてかなりの検索を行ってきましたが、あまり運がありません。私の状況は、「C# スニファーでソケット オプションを設定するときに、エラー コード 10022 (無効な引数) が発生する理由がわからない」とよく似ています。ただし、そこに記載されている回答は、問題の解決には役立ちませんでした。
問題を引き起こしているコードは次のとおりです。
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true);
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true); \\ SocketException thrown here
HeaderIncluded を設定している行で、エラー番号 10022 の SocketException がスローされています。このコードは私が書いたものではなく、テスト済みの製品コードであると想定していました。したがって、この時点で、それは私のコンピューターであると考えています。ただし、ここで間違った道をたどりたくないし、誰かにこれをコーディングするように頼むつもりもありません。私が気が狂う前に、いくつかのガイダンスをいただければ幸いです。
私はそれらがロングショットだと思っていたにもかかわらず、以下を除外しました:
- おそらく、HeaderIncluded は ProtocolType.Tcp では使用できず、ProtocolType.IP である必要があります。これをテストしてもエラーが発生します。
- おそらく、ソケット タイプは SocketType.Raw である必要があります。これをテストしてもエラーが発生します。
- HeaderIncluded に対して GetSocketOption を実行しようとして、同じ SocketException を取得しました。
- この 1 つのソケット オプション行をコメント アウトすると、コードはうまく機能します。
コードが間違っていることは頭の片隅にありますが、テストと展開が完了したと思われるコードにたどり着いたという事実は、別の考えを持っています。ひづめが聞こえたら、シマウマではなく馬だと思います。