Module  java.base
软件包  java.net

Interface SocketOptions

  • 所有已知实现类:
    DatagramSocketImplSocketImpl


    public interface SocketOptions
    获取/设置套接字选项的方法的接口。 该接口由SocketImplDatagramSocketImpl实现 这些子类应该覆盖此接口的方法,以支持自己的选项。

    在此界面中指定选项的方法和常量仅用于实现。 如果你不是子类化SocketImpl或DatagramSocketImpl, 你不会直接使用这些。 有一些类型安全的方法可以在Socket,ServerSocket,DatagramSocket和MulticastSocket中获取/设置这些选项。

    从以下版本开始:
    1.1
    • Field Summary

      Fields  
      Modifier and Type Field 描述
      static int IP_MULTICAST_IF
      设置发送组播数据包的出接口。
      static int IP_MULTICAST_IF2
      与上述相同。
      static int IP_MULTICAST_LOOP
      此选项启用或禁用组播数据报的本地环回。
      static int IP_TOS
      此选项将TCP或UDP套接字的IP头中的服务类型或流量类别字段设置。
      static int SO_BINDADDR
      获取套接字的本地地址绑定(此选项不能仅“设置”,因为套接字在创建时绑定,因此本地绑定的地址不能被更改)。
      static int SO_BROADCAST
      为套接字设置SO_BROADCAST。
      static int SO_KEEPALIVE
      当为TCP套接字设置keepalive选项,并且没有数据在两个方向上通过套接字交换2小时(注意:实际值取决于实现),TCP自动向对等体发送keepalive探测。
      static int SO_LINGER
      指定一个随叫随到的超时时间。
      static int SO_OOBINLINE
      当设置OOBINLINE选项时,将通过套接字输入流接收在套接字上接收的任何TCP紧急数据。
      static int SO_RCVBUF
      设置平台为传入网络I / O使用的底层缓冲区的大小。
      static int SO_REUSEADDR
      为套接字设置SO_REUSEADDR。
      static int SO_REUSEPORT
      为套接字设置SO_REUSEPORT。
      static int SO_SNDBUF
      设置平台用于传出网络I / O的底层缓冲区的大小。
      static int SO_TIMEOUT
      在阻塞Socket操作上设置一个超时:
      static int TCP_NODELAY
      禁用Nagle的这个连接的算法。
    • 字段详细信息

      • SO_BINDADDR

        @Native
        static final int SO_BINDADDR
        获取套接字的本地地址绑定(此选项不能仅“设置”,因为套接字在创建时绑定,因此本地绑定的地址不能被更改)。 套接字的默认本地地址为INADDR_ANY,表示多宿主主机上的任何本地地址。 多宿主主机可以使用此选项来接受仅与其一个地址的连接(在ServerSocket或DatagramSocket的情况下),或者指定其对等体(对于Socket或DatagramSocket)的返回地址。 此选项的参数是InetAddress。

        必须在构造函数中指定此选项。

        适用于:SocketImpl,DatagramSocketImpl

        另请参见:
        Socket.getLocalAddress()DatagramSocket.getLocalAddress()Constant Field Values
      • SO_REUSEADDR

        @Native
        static final int SO_REUSEADDR
        为套接字设置SO_REUSEADDR。 这仅用于Java中的MulticastSockets,默认情况下为MulticastSockets设置。

        适用于:DatagramSocketImpl

        另请参见:
        Constant Field Values
      • SO_REUSEPORT

        @Native
        static final int SO_REUSEPORT
        为套接字设置SO_REUSEPORT。 此选项启用和禁用多个套接字侦听相同的地址和端口的能力。

        适用于:SocketImpl,DatagramSocketImpl

        从以下版本开始:
        9
        另请参见:
        StandardSocketOptions.SO_REUSEPORTConstant Field Values
      • SO_BROADCAST

        @Native
        static final int SO_BROADCAST
        为套接字设置SO_BROADCAST。 此选项启用和禁用进程发送广播消息的功能。 仅支持数据报套接字,仅支持支持广播消息(例如以太网,令牌环等)概念的网络,DatagramSockets默认设置。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • IP_MULTICAST_LOOP

        @Native
        static final int IP_MULTICAST_LOOP
        此选项启用或禁用组播数据报的本地环回。 此选项默认启用多播套接字。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • IP_TOS

        @Native
        static final int IP_TOS
        此选项将TCP或UDP套接字的IP头中的服务类型或流量类别字段设置。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • SO_LINGER

        @Native
        static final int SO_LINGER
        指定一个随叫随到的超时时间。 此选项禁用/启用TCP Socket的close())的即时返回。 使用非零整数启用此选项意味着close()将阻止发送和确认写入对等体的所有数据,此时套接字优雅地关闭。 在达到停留超时时,插座被强制关闭,并带有TCP RST。 启用超时为零的选项将立即强制关闭。 如果指定的超时值超过65,535,则减少到65,535。

        仅适用于TCP:SocketImpl

        另请参见:
        Socket.setSoLinger(boolean, int)Socket.getSoLinger()Constant Field Values
      • SO_KEEPALIVE

        @Native
        static final int SO_KEEPALIVE
        当为TCP套接字设置keepalive选项,并且没有数据在两个方向上通过套接字交换2小时(注意:实际值取决于实现),TCP自动向对等体发送keepalive探测。 该探测器是对等体必须响应的TCP段。 预期三种响应之一:1.对端以预期的ACK进行响应。 该应用程序未通知(因为一切正常)。 TCP将在另外2个小时不活动之后发送另一个探测器。 2.对等体用RST响应,该RST通知本地TCP对等体主机已经崩溃并重新启动。 插座关闭。 3.同行没有回应。 插座关闭。 此选项的目的是检测对等主机是否崩溃。 仅适用于TCP套接字:SocketImpl
        另请参见:
        Socket.setKeepAlive(boolean)Socket.getKeepAlive()Constant Field Values
    • 方法详细信息

      • setOption

        void setOption​(int optID,
                       Object value)
                throws SocketException
        启用/禁用optID指定的选项。 如果选项是启用的,它需要一个特定期权“价值”,这是传递。 值的实际类型是特定于选项的,传递不是预期类型的东西是错误的:
          SocketImpl s;
         ...
         s.setOption(SO_LINGER, new Integer(10));
            // OK - set SO_LINGER w/ timeout of 10 sec.
         s.setOption(SO_LINGER, new Double(10));
            // ERROR - expects java.lang.Integer 
        如果所请求的选项是二进制的,则可以使用java.lang.Boolean的此方法设置它:
          s.setOption(TCP_NODELAY, Boolean.TRUE);
            // OK - enables TCP_NODELAY, a binary option 

        可以使用Boolean.FALSE的此方法禁用任何选项:
          s.setOption(TCP_NODELAY, Boolean.FALSE);
            // OK - disables TCP_NODELAY
         s.setOption(SO_LINGER, Boolean.FALSE);
            // OK - disables SO_LINGER 

        对于具有的开启和关闭一个概念,需要非布尔参数,它的值设置为比Boolean.FALSE隐含使其以外的任何一个选项。
        如果该选项无法识别,套接字关闭或发生一些低级错误,则抛出SocketException异常
        参数
        optID - 标识该选项
        value - 套接字选项的参数
        异常
        SocketException - 如果该选项无法识别,则套接字关闭,或发生一些低级错误
        另请参见:
        getOption(int)
      • getOption

        Object getOption​(int optID)
                  throws SocketException
        获取选项的值。 如果启用,二进制选项将返回java.lang.Boolean.TRUE,如果禁用,则返回java.lang.Boolean.FALSE,例如:
          SocketImpl s;
         ...
         Boolean noDelay = (Boolean)(s.getOption(TCP_NODELAY));
         if (noDelay.booleanValue()) {
             // true if TCP_NODELAY is enabled...
         ...
         } 

        对于将特定类型作为参数的选项,getOption(int)将返回参数的值,否则返回java.lang.Boolean.FALSE:

          Object o = s.getOption(SO_LINGER);
         if (o instanceof Integer) {
             System.out.print("Linger time is " + ((Integer)o).intValue());
         } else {
           // the true type of o is java.lang.Boolean.FALSE;
         } 
        参数
        optID - 标识提取选项的 int
        结果
        该选项的值
        异常
        SocketException - 如果套接字关闭
        SocketException - 如果 optID在协议栈(包括SocketImpl)中是未知的,
        另请参见:
        setOption(int, java.lang.Object)