s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      s.Bind(new IPEndPoint(IPAddress.Any, 19999));
      object o = s.GetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.MaxConnections);
在 GetSocketOption 这句抛出异常:
未处理的“System.Net.Sockets.SocketException”类型的异常出现在 system.dll 中。
其他信息: 提供了一个无效的参数。
如果 SocketOptionLevel 使用其他枚举值也会抛出异常:
未处理的“System.Net.Sockets.SocketException”类型的异常出现在 system.dll 中。
其他信息: 在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。第二句的绑定 socket 操作不论是否执行都会得到这个结果,搜 google 也没搜出什么有用的结果来...

解决方案 »

  1.   

    在 Listen 方法中指定任何大于 5 的参数都无效,监听队列最大只能到 5,这是为什么?
      

  2.   

    已经知道监听队列最大只能到 5 是操作系统版本的原因,在 2k3 上无这个限制,其他的 Server 版应该也没有限制或者限制的数目不同。但是在 2k3 上调用object o = s.GetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.MaxConnections);仍然产生异常,现象同上
      

  3.   


                      /// <summary>
    /// 启动服务
    /// </summary>
    public void Start()
    {
    if(this._IsStart)
    throw new InvalidOperationException();
    _socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
    _socket.Bind(new IPEndPoint(IPAddress.Any,_port));
    _socket.Listen((int)System.Net.Sockets.SocketOptionName.MaxConnections); //应该在此指定连接数
    _IsStart=true;
    ThreadPool.QueueUserWorkItem(this._onStart);
    }
      

  4.   

    呃,我问的是如何“获得”socket 监听队列的最大允许长度,不是如何“设置”
      

  5.   

    参阅http://winfx.msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_fxnetwork/html/5ef9fe4b-8d3d-490e-9259-1d014b2181af.asp