SetSocketOption不适用于SocketOptionName.CheckSumc#

SetSocketOption不适用于SocketOptionName.CheckSumc#,c#,visual-studio,sockets,server,network-programming,C#,Visual Studio,Sockets,Server,Network Programming,我正在尝试为C#.Net中的UDP套接字设置一个选项。我很确定我正在做微软文档中提到的所有事情;但是,它正在引发“提供的参数无效”异常 Socket socket; socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.Bind(new IPEndPoint(IPAddress.Any, port)); // MUST BE BIND

我正在尝试为C#.Net中的UDP套接字设置一个选项。我很确定我正在做微软文档中提到的所有事情;但是,它正在引发“提供的参数无效”异常

    Socket socket;
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    socket.Bind(new IPEndPoint(IPAddress.Any, port));

    // MUST BE BIND FIRST BEFORE SETTING OPTIONS!
    // To find out what option can be used with what:
    // https://msdn.microsoft.com/en-us/library/1011kecd(v=vs.110).aspx
    socket.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.NoChecksum, 0);
    socket.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.ChecksumCoverage, 1);

将SocketOptionName.ChecksumCoverage选项设置为1或true时,将正确引发异常。我看了文件,应该是有效的论点。我做错了什么?

您可以先使用“无校验和”然后使用ChecksumCoverage吗?即使在注释“无校验和”时,它仍然会抛出ExceptionSetSocket选项。第三个参数是可选的。所以我省略了。NoCheckSum和ChecksumCoverage都没有值,因此不需要第三个参数。我将从代码中省略NoCheckSum。实际上,SetSocketOption没有不接受第三个值的重载方法。他们确实有价值。您可以获得如下值:int-NoChecksum=(int)socket.GetSocketOption(SocketOptionLevel.Udp,SocketOptionName.NoChecksum);Console.WriteLine(“NoChecksum值:+NoChecksum”);尝试第三个参数null。