我已经对这个主题进行了很多搜索,但运气不佳。我的情况与在我的 C# sniffer 中设置套接字选项时不知道为什么会出现错误代码 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。
- 如果我注释掉这一个套接字选项行,代码就很好用。
在我的脑海中,代码是错误的,但是在它应该已经过测试和部署之后我才开始使用这个代码的事实让我不这么认为。如果你听到蹄声,想想马,而不是斑马。