-
- 所有已知实现类:
-
DatagramSocketImpl
,SocketImpl
public interface SocketOptions
获取/设置套接字选项的方法的接口。 该接口由SocketImpl和DatagramSocketImpl实现 。 这些子类应该覆盖此接口的方法,以支持自己的选项。在此界面中指定选项的方法和常量仅用于实现。 如果你不是子类化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的这个连接的算法。
-
-
-
字段详细信息
-
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
- 另请参见:
- Constant Field Values
-
SO_REUSEPORT
@Native static final int SO_REUSEPORT
为套接字设置SO_REUSEPORT。 此选项启用和禁用多个套接字侦听相同的地址和端口的能力。适用于:SocketImpl,DatagramSocketImpl
- 从以下版本开始:
- 9
- 另请参见:
-
StandardSocketOptions.SO_REUSEPORT
, Constant Field Values
-
SO_BROADCAST
@Native static final int SO_BROADCAST
为套接字设置SO_BROADCAST。 此选项启用和禁用进程发送广播消息的功能。 仅支持数据报套接字,仅支持支持广播消息(例如以太网,令牌环等)概念的网络,DatagramSockets默认设置。- 从以下版本开始:
- 1.4
- 另请参见:
- Constant Field Values
-
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地址设置输出接口。 注意:确保没有与此冲突
-
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
-
SO_TIMEOUT
@Native static final int SO_TIMEOUT
在阻塞Socket操作上设置一个超时:ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();
必须先设置该选项才能进入阻止操作才能生效。 如果超时过期,并且操作将继续阻止,则引发java.io.InterruptedIOException 。 在这种情况下,Socket不关闭。
适用于所有套接字:SocketImpl,DatagramSocketImpl
-
SO_SNDBUF
@Native static final int SO_SNDBUF
设置平台用于传出网络I / O的底层缓冲区的大小。 当在集合中使用时,这是从应用程序向内核提供的用于通过套接字发送的数据的缓冲区大小的建议。 当在get中使用时,必须返回在该套接字上发送数据时平台实际使用的缓冲区的大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl
-
SO_RCVBUF
@Native static final int SO_RCVBUF
设置平台为传入网络I / O使用的底层缓冲区的大小。 当在集合中使用时,这是从应用程序到内核的关于用于通过套接字接收的数据的缓冲区的大小的建议。 当在get中使用时,必须返回平台实际使用的缓冲区的大小,才能在该套接字上的数据中接收数据。 适用于所有套接字:SocketImpl,DatagramSocketImpl
-
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
-
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
对于具有的开启和关闭一个概念,需要非布尔参数,它的值设置为比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)
-
-