public interface SocketOptions
java.net.SocketOptions |
Known Indirect Subclasses |
获取/设置套接字选项的方法的接口。 该接口由SocketImpl和DatagramSocketImpl实现 。 这些的子类应该覆盖此接口的方法以支持它们自己的选项。
在这个接口中指定选项的方法和常量仅用于实现。 如果您不是继承SocketImpl或DatagramSocketImpl, 则不会直接使用它们。 在Socket,ServerSocket,DatagramSocket和MulticastSocket中都有类型安全的方法来获取/设置每个选项。
Constants |
|
---|---|
int |
IP_MULTICAST_IF 设置发送组播数据包的出接口。 |
int |
IP_MULTICAST_IF2 同上。 |
int |
IP_MULTICAST_LOOP 该选项启用或禁用多播数据报的本地回送。 |
int |
IP_TOS 此选项为TCP或UDP套接字的IP标头设置服务类型或通信类别字段。 |
int |
SO_BINDADDR 获取套接字的本地地址绑定(由于套接字在创建时绑定,因此不能更改本地绑定的地址),因此此选项不能仅“设置”“获得”。 |
int |
SO_BROADCAST 为套接字设置SO_BROADCAST。 |
int |
SO_KEEPALIVE 如果为TCP套接字设置keepalive选项,并且没有数据在两个方向上在任何方向上都在套接字上交换2小时(注意:实际值取决于实施方式),则TCP将自动向对等方发送Keepalive探针。 |
int |
SO_LINGER 指定延时关闭超时。 |
int |
SO_OOBINLINE 当设置OOBINLINE选项时,套接字上接收到的任何TCP紧急数据将通过套接字输入流接收。 |
int |
SO_RCVBUF 设置提示传入网络I / O平台使用的基础缓冲区的大小。 |
int |
SO_REUSEADDR 为套接字设置SO_REUSEADDR。 |
int |
SO_SNDBUF 设置平台用于传出网络I / O的底层缓冲区的大小。 |
int |
SO_TIMEOUT 设置阻止套接字操作的超时时间: ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive(); 该选项必须在进入阻塞操作之前设置才能生效。 |
int |
TCP_NODELAY 禁用此连接的Nagle算法。 |
Public methods |
|
---|---|
abstract Object |
getOption(int optID) 获取选项的值。 |
abstract void |
setOption(int optID, Object value) 启用/禁用 optID指定的选项。 |
int IP_MULTICAST_IF
设置发送组播数据包的出接口。 在具有多个网络接口的主机上很有用,其中应用程序想要使用非系统默认值。 取/返回一个InetAddress。
适用于Multicast:DatagramSocketImpl
常量值:16(0x00000010)
int IP_MULTICAST_IF2
同上。 引入此选项后,IP_MULTICAST_IF的行为将保持与以前相同,而此新选项可支持使用IPv4和IPv6地址设置出站接口。 注意:确保没有与此冲突
常量值:31(0x0000001f)
int IP_MULTICAST_LOOP
该选项启用或禁用多播数据报的本地回送。 默认情况下,此选项用于多播套接字。
常量值:18(0x00000012)
int SO_BINDADDR
获取套接字的本地地址绑定(由于套接字在创建时绑定,因此不能更改本地绑定的地址),因此此选项不能仅“设置”“获得”。 套接字的默认本地地址是INADDR_ANY,表示多宿主主机上的任何本地地址。 多宿主主机可以使用此选项来接受仅连接到其中一个地址的连接(在ServerSocket或DatagramSocket的情况下),或者指定其到对等体的返回地址(对于Socket或DatagramSocket)。 该选项的参数是一个InetAddress。
这个选项 必须在构造函数中指定。
适用于:SocketImpl,DatagramSocketImpl
常量值:15(0x0000000f)
int SO_BROADCAST
为套接字设置SO_BROADCAST。 该选项启用和禁用进程发送广播消息的能力。 它仅支持数据报套接字,并且仅支持广播消息(例如以太网,令牌环等)概念的网络,并且默认情况下为DatagramSocket设置。
常量值:32(0x00000020)
int SO_KEEPALIVE
如果为TCP套接字设置keepalive选项,并且没有数据在两个方向上在任何方向上都在套接字上交换2小时(注意:实际值取决于实施方式),则TCP将自动向对等方发送Keepalive探针。 该探测是对等端必须响应的TCP段。 期望三个响应之一:1.对等体以预期的ACK作出响应。 该应用程序没有通知(因为一切正常)。 TCP将在另外2小时不活动之后发送另一个探测。 2.对等端用RST响应,告诉本地TCP对端主机已经崩溃并重新启动。 插座关闭。 3.没有来自同伴的回应。 插座关闭。 此选项的目的是检测对等主机是否崩溃。 仅对TCP套接字有效:SocketImpl
常量值:8(0x00000008)
int SO_LINGER
指定延时关闭超时。 该选项禁用/启用从TCP套接字的close()立即返回。 使用非零整数启用此选项意味着close()将阻塞,等待传输并确认写入对等端的所有数据,此时套接字将正常关闭。 在达到延时超时后,使用TCP RST 强制关闭套接字。 超时时间为零的选项会立即强制关闭。 如果指定的超时值超过65,535,它将减少到65,535。
仅对TCP:SocketImpl有效
常量值:128(0x00000080)
int SO_OOBINLINE
当设置OOBINLINE选项时,套接字上接收到的任何TCP紧急数据将通过套接字输入流接收。 当该选项被禁用时(这是默认设置),紧急数据将被静默丢弃。
常量值:4099(0x00001003)
int SO_RCVBUF
设置提示传入网络I / O平台使用的基础缓冲区的大小。 在集合中使用时,这是从应用程序向内核提供的关于要通过套接字接收数据的缓冲区大小的建议。 在get中使用时,必须在接收此套接字上的数据时返回平台实际使用的缓冲区的大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl
也可以看看:
常量值:4098(0x00001002)
int SO_REUSEADDR
为套接字设置SO_REUSEADDR。 这仅用于Java中的MulticastSockets,并且默认情况下为MulticastSockets设置。
适用于:DatagramSocketImpl
常量值:4(0x00000004)
int SO_SNDBUF
设置平台用于传出网络I / O的底层缓冲区的大小。 在set中使用时,这是从应用程序向内核提出的关于要通过套接字发送数据的缓冲区大小的建议。 在get中使用时,在发送此套接字上的数据时,它必须返回平台实际使用的缓冲区的大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl
常量值:4097(0x00001001)
int SO_TIMEOUT
设置阻止套接字操作的超时时间:
ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();
该选项必须在进入阻塞操作之前设置才能生效。 如果超时过期并且操作将继续阻塞,则引发java.io.InterruptedIOException 。 在这种情况下,套接字未关闭。
适用于所有套接字:SocketImpl,DatagramSocketImpl
常量值:4102(0x00001006)
int TCP_NODELAY
禁用此连接的Nagle算法。 写入数据到网络不会被缓存,以确认之前写入的数据。
仅适用于TCP:SocketImpl。
常数值:1(0x00000001)
Object getOption (int optID)
获取选项的值。 如果启用,二进制选项将返回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); }
Parameters | |
---|---|
optID |
int : an int identifying the option to fetch |
Returns | |
---|---|
Object |
the value of the option |
Throws | |
---|---|
SocketException |
if the socket is closed |
SocketException |
if optID is unknown along the protocol stack (including the SocketImpl) |
void setOption (int optID, Object value)
启用/禁用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.IntegerIf the requested option is binary, it can be set using this method by a java.lang.Boolean:
s.setOption(TCP_NODELAY, new Boolean(true)); // OK - enables TCP_NODELAY, a binary option
s.setOption(TCP_NODELAY, new Boolean(false)); // OK - disables TCP_NODELAY s.setOption(SO_LINGER, new Boolean(false)); // OK - disables SO_LINGER
Parameters | |
---|---|
optID |
int : identifies the option |
value |
Object : the parameter of the socket option |
Throws | |
---|---|
SocketException |
if the option is unrecognized, the socket is closed, or some low-level error occurred |
也可以看看: