public interface SocketOptions
获取/设置套接字选项的方法的接口。此接口由 SocketImpl 和 DatagramSocketImpl 实现。它们的子类应该重写此接口的方法来支持它们自己的选项。
在此接口中指定选项的方法和常量仅用于实现目的。如果不为 SocketImpl 或 DatagramSocketImpl 创建子类,就不要直接使用它们。在 Socket、ServerSocket、DatagramSocket 和 MulticastSocket 中,存在获取/设置所有这些选项的类型安全的方法。
字段摘要 | |
---|---|
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 设置阻塞 Socket 操作的超时值: ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive(); 选项必须在进入阻塞操作前设置才能生效。 |
static int |
TCP_NODELAY 对此连接禁用 Nagle 算法。 |
方法摘要 | |
---|---|
Object |
getOption(int optID) 获取选项的值。 |
void |
setOption(int optID, Object value) 启用/禁用 optID 指定的选项。 |
字段详细信息 |
---|
static final int TCP_NODELAY
仅对 TCP (SocketImpl) 有效。
static final int SO_BINDADDR
此选项必须在构造方法中指定。
对 SocketImpl、DatagramSocketImpl 有效。
static final int SO_REUSEADDR
对 DatagramSocketImpl 有效。
static final int SO_BROADCAST
static final int IP_MULTICAST_IF
对多播(DatagramSocketImpl)有效。
static final int IP_MULTICAST_IF2
static final int IP_MULTICAST_LOOP
static final int IP_TOS
static final int SO_LINGER
仅对 TCP(SocketImpl)有效。
static final int SO_TIMEOUT
ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive();
选项必须在进入阻塞操作前设置才能生效。如果超过超时值,操作将继续阻塞,将引发 java.io.InterruptedIOException。在此情况下,将不关闭 Socket。
对所有套接字(SocketImpl、DatagramSocketImpl)都有效。
static final int SO_SNDBUF
static final int SO_RCVBUF
static final int SO_KEEPALIVE
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
SocketException
- 如果套接字被关闭
SocketException
- 如果
optID 根据协议堆栈(包括 SocketImpl)是未知的
setOption(int, java.lang.Object)