gpt4 book ai didi

c# - 为什么将 SocketOptionName.HeaderIncluded 设置为 true 时会出现 SocketException 10022?

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:41 24 4
gpt4 key购买 nike

我已经对这个主题进行了大量搜索,但运气不佳。我的情况很像Don't know why I'm getting Error Code 10022 (Invalid Argument) when setting socket options in my C# sniffer .但是,那里给出的答案并没有帮助我解决问题。

给我带来麻烦的代码是:

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。这段代码不是我写的,我以为这是经过测试的生产代码。所以在这一点上,我认为这是我的电脑。但是,我不想在这里走错路,也不想要求任何人为我编写代码。在我发疯之前提供一些指导将不胜感激。

我已经排除了以下情况,尽管我认为它们不太可能:

  1. 也许 HeaderIncluded 不适用于 ProtocolType.Tcp这需要是 ProtocolType.IP。测试了这个,仍然得到错误。
  2. 也许套接字类型需要是 SocketType.Raw。已测试这仍然得到错误。
  3. 尝试过做一个GetSocketOption for HeaderIncluded 并得到相同的 SocketException。
  4. 如果我注释掉这个 one socket option 行,代码会很好用。

在我的脑海深处,代码是错误的,但事实上我是在它应该已经过测试和部署之后才看到这段代码的,这让我有了不同的想法。如果你听到蹄声,想想马而不是斑马之类的东西。

最佳答案

查看代码示例 here ,在“捕获数据包”标题下(如果您还没有看到它的话)。

有两点不同:

  1. 该示例使用原始套接字 (SocketType.Raw)。你的使用 SocketType.Stream
  2. 该示例在设置选项之前在套接字上调用 bind。你的(至少在你提供的代码中)没有。

根据我的经验,这两种差异很可能是您遇到的 10022 错误的原因。

关于c# - 为什么将 SocketOptionName.HeaderIncluded 设置为 true 时会出现 SocketException 10022?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18664668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com