我已经做了很多有关该主题的搜索,但我没有很多运气。我的情况与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。我没有编写此代码,我以为这是经过测试的生产代码。因此,在这一点上,我认为这是我的计算机。但是,我不想在这里走错路,也不想让任何人为我编写代码。我疯了之前的一些指导将不胜感激。
尽管我认为以下内容比较遥远,但我已经排除了以下内容:
并且必须是ProtocolType.IP。经过测试,仍然可以
错误。
这并仍然得到错误。
用于HeaderIncluded的GetSocketOption并获取相同的SocketException。
在我的脑海中,代码是错误的,但是我认为应该在经过测试和部署之后才使用此代码,这一事实使我产生了其他想法。如果您听到蹄声,请思考马而不是斑马。
最佳答案
请查看“捕获数据包”标题下的代码示例here(如果尚未看到)。
有两点不同:
SocketType.Raw
)。您使用SocketType.Stream
。 bind
。您的(至少在您提供的代码中)没有。 根据我的经验,这两种差异都是您遇到10022错误的极有可能的原因。
关于c# - 将SocketOptionName.HeaderIncluded设置为true时为什么会出现SocketException 10022?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18664668/