public interface SocketOptions
在此界面中指定选项的方法和常量仅用于实现。 如果你不是子类化SocketImpl或DatagramSocketImpl, 你不会直接使用这些。 有一些类型安全的方法可以在Socket,ServerSocket,DatagramSocket和MulticastSocket中获取/设置这些选项。
Modifier and Type | Field and Description |
---|---|
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_SNDBUF
设置平台用于传出网络I / O的底层缓冲区的大小。
|
static int |
SO_TIMEOUT
在阻塞套接字操作时设置超时:
|
static int |
TCP_NODELAY
禁用Nagle的这个连接的算法。
|
@Native static final int TCP_NODELAY
仅适用于TCP:SocketImpl。
@Native static final int SO_BINDADDR
必须在构造函数中指定此选项。
适用于:SocketImpl,DatagramSocketImpl
@Native static final int SO_REUSEADDR
适用于:DatagramSocketImpl
@Native static final int SO_BROADCAST
@Native static final int IP_MULTICAST_IF
适用于组播:DatagramSocketImpl
@Native static final int IP_MULTICAST_IF2
@Native static final int IP_MULTICAST_LOOP
@Native static final int IP_TOS
@Native static final int SO_LINGER
仅适用于TCP:SocketImpl
@Native static final int SO_TIMEOUT
ServerSocket.accept();
SocketInputStream.read();
DatagramSocket.receive();
必须先设置该选项才能进入阻止操作才能生效。 如果超时过期,并且操作将继续阻止,则引发java.io.InterruptedIOException 。 在这种情况下,Socket不关闭。
适用于所有套接字:SocketImpl,DatagramSocketImpl
@Native static final int SO_SNDBUF
@Native static final int SO_RCVBUF
@Native static final int SO_KEEPALIVE
@Native static final int SO_OOBINLINE
void setOption(int optID, Object value) throws SocketException
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, 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
optID
- 识别选项
value
- 套接字选项的参数
SocketException
- 如果该选项无法识别,则套接字关闭,或发生一些低级错误
getOption(int)
Object getOption(int optID) throws SocketException
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
要获取的选项的
int
SocketException
- 如果插座关闭
SocketException
- 如果
optID沿着协议栈(包括SocketImpl)未知,
setOption(int, java.lang.Object)