-
- 所有已知实现类:
-
DatagramSocketImpl
,SocketImpl
public interface SocketOptions
获取/设置套接字选项的方法接口。 该接口由以下实现: SocketImpl和DatagramSocketImpl 。 这些子类应覆盖此接口的方法,以支持自己的选项。在此接口中指定选项的方法和常量仅用于实现。 如果您不是SocketImpl或DatagramSocketImpl的子类, 则不会直接使用它们。 在Socket,ServerSocket,DatagramSocket和MulticastSocket中有一些类型安全的方法来获取/设置这些选项。
- 从以下版本开始:
- 1.1
-
-
字段汇总
字段 变量和类型 字段 描述 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的此连接算法。
-
-
-
字段详细信息
-
TCP_NODELAY
@Native static final int TCP_NODELAY
禁用Nagle的此连接算法。 在确认先前写入的数据之前,不会缓冲写入网络的数据。仅对TCP有效:SocketImpl。
-
SO_BINDADDR
@Native static final int SO_BINDADDR
获取套接字的本地地址绑定(此选项不能仅“设置”为“已获取”,因为套接字在创建时绑定,因此无法更改本地绑定的地址)。 套接字的默认本地地址是INADDR_ANY,表示多宿主主机上的任何本地地址。 多宿主主机可以使用此选项仅接受与其中一个地址的连接(在ServerSocket或DatagramSocket的情况下),或者指定其到对等体的返回地址(对于Socket或DatagramSocket)。 此选项的参数是InetAddress。必须在构造函数中指定此选项。
适用于:SocketImpl,DatagramSocketImpl
-
SO_REUSEADDR
@Native static final int SO_REUSEADDR
为套接字设置SO_REUSEADDR。 这仅用于java中的MulticastSockets,默认情况下为MulticastSockets设置。适用于:DatagramSocketImpl
- 另请参见:
- 常数字段值
-
SO_REUSEPORT
@Native static final int SO_REUSEPORT
为套接字设置SO_REUSEPORT。 此选项启用和禁用让多个套接字侦听同一地址和端口的功能。适用于:SocketImpl,DatagramSocketImpl
- 从以下版本开始:
- 9
- 另请参见:
-
StandardSocketOptions.SO_REUSEPORT
, 常数字段值
-
SO_BROADCAST
@Native static final int SO_BROADCAST
为套接字设置SO_BROADCAST。 此选项启用和禁用进程发送广播消息的能力。 它仅支持数据报套接字,仅支持支持广播消息概念的网络(例如以太网,令牌环等),并且默认情况下为DatagramSockets设置。- 从以下版本开始:
- 1.4
- 另请参见:
- 常数字段值
-
IP_MULTICAST_IF
@Native static final int IP_MULTICAST_IF
设置发送组播数据包的出接口。 在具有多个网络接口的主机上很有用,其中应用程序要使用除系统默认值之外的其他应 获取/返回InetAddress。适用于多播:DatagramSocketImpl
-
IP_MULTICAST_IF2
@Native static final int IP_MULTICAST_IF2
与上面相同。 引入此选项以使IP_MULTICAST_IF的行为与以前保持一致,而此新选项可支持使用IPv4和IPv6地址设置传出接口。 注意:确保与此没有冲突- 从以下版本开始:
- 1.4
- 另请参见:
-
MulticastSocket.setNetworkInterface(NetworkInterface)
,MulticastSocket.getNetworkInterface()
, 常数字段值
-
IP_MULTICAST_LOOP
@Native static final int IP_MULTICAST_LOOP
此选项启用或禁用多播数据报的本地环回。 默认情况下,为多播套接字启用此选项。- 从以下版本开始:
- 1.4
- 另请参见:
- 常数字段值
-
SO_LINGER
@Native static final int SO_LINGER
指定关闭时延迟超时。 此选项禁用/启用从TCP套接字的close()立即返回。 使用非零整数启用此选项意味着close()将阻止等待传输并确认写入对等端的所有数据,此时套接字将正常关闭。 达到延迟超时后,使用TCP RST 强制关闭套接字。 启用超时为零的选项会立即强制关闭。 如果指定的超时值超过65,535,则将减少到65,535。仅对TCP:SocketImpl有效
-
SO_TIMEOUT
@Native static final int SO_TIMEOUT
在阻止Socket操作时设置超时:ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();
必须在进入阻止操作之前设置该选项才能生效。 如果超时到期并且操作将继续阻塞,则引发java.io.InterruptedIOException 。 在这种情况下,套接字未关闭。
适用于所有套接字:SocketImpl,DatagramSocketImpl
-
SO_SNDBUF
@Native static final int SO_SNDBUF
设置提示平台用于传出网络I / O的底层缓冲区的大小。 当在set中使用时,这是来自应用程序的内核建议有关用于通过套接字发送的数据的缓冲区的大小。 在get中使用时,必须返回平台在此套接字上发送数据时实际使用的缓冲区大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl
-
SO_RCVBUF
@Native static final int SO_RCVBUF
设置提示平台用于传入网络I / O的底层缓冲区的大小。 当在set中使用时,这是来自应用程序的内核建议有关用于通过套接字接收的数据的缓冲区的大小。 在get中使用时,这必须返回平台在接收此套接字上的数据时实际使用的缓冲区的大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl
-
SO_KEEPALIVE
@Native static final int SO_KEEPALIVE
当为TCP套接字设置keepalive选项并且在任一方向上没有跨套接字交换数据2小时(注意:实际值取决于实现),TCP会自动向对等方发送keepalive探测。 此探测是对等方必须响应的TCP段。 预期三个响应之一:1。对等体以预期的ACK响应。 未通知应用程序(因为一切正常)。 在另外2小时不活动之后,TCP将发送另一个探测。 2.对等体使用RST进行响应,该RST告知本地TCP对等主机已崩溃并重新启动。 插座已关闭。 3.同行没有回应。 插座已关闭。 此选项的目的是检测对等主机是否崩溃。 仅对TCP套接字有效:SocketImpl
-
SO_OOBINLINE
@Native static final int SO_OOBINLINE
设置OOBINLINE选项后,将通过套接字输入流接收套接字上收到的任何TCP紧急数据。 禁用该选项(默认情况下)时,将以静默方式丢弃紧急数据。
-
-
方法详细信息
-
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
对于具有on和off概念并且需要非布尔参数的选项,将其值设置为除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)
-
-