Most visited

Recently visited

Added in API level 1

SocketOptions

public interface SocketOptions

java.net.SocketOptions
Known Indirect Subclasses


获取/设置套接字选项的方法的接口。 该接口由SocketImplDatagramSocketImpl实现 这些的子类应该覆盖此接口的方法以支持它们自己的选项。

在这个接口中指定选项的方法和常量仅用于实现。 如果您不是继承SocketImpl或DatagramSocketImpl, 则不会直接使用它们。 在Socket,ServerSocket,DatagramSocket和MulticastSocket中都有类型安全的方法来获取/设置每个选项。

Summary

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指定的选项。

Constants

IP_MULTICAST_IF

Added in API level 1
int IP_MULTICAST_IF

设置发送组播数据包的出接口。 在具有多个网络接口的主机上很有用,其中应用程序想要使用非系统默认值。 取/返回一个InetAddress。

适用于Multicast:DatagramSocketImpl

也可以看看:

常量值:16(0x00000010)

IP_MULTICAST_IF2

Added in API level 1
int IP_MULTICAST_IF2

同上。 引入此选项后,IP_MULTICAST_IF的行为将保持与以前相同,而此新选项可支持使用IPv4和IPv6地址设置出站接口。 注意:确保没有与此冲突

也可以看看:

常量值:31(0x0000001f)

IP_MULTICAST_LOOP

Added in API level 1
int IP_MULTICAST_LOOP

该选项启用或禁用多播数据报的本地回送。 默认情况下,此选项用于多播套接字。

常量值:18(0x00000012)

IP_TOS

Added in API level 1
int IP_TOS

此选项为TCP或UDP套接字的IP标头设置服务类型或通信类别字段。

常量值:3(0x00000003)

SO_BINDADDR

Added in API level 1
int SO_BINDADDR

获取套接字的本地地址绑定(由于套接字在创建时绑定,因此不能更改本地绑定的地址),因此此选项不能仅“设置”“获得”。 套接字的默认本地地址是INADDR_ANY,表示多宿主主机上的任何本地地址。 多宿主主机可以使用此选项来接受仅连接到其中一个地址的连接(在ServerSocket或DatagramSocket的情况下),或者指定其到对等体的返回地址(对于Socket或DatagramSocket)。 该选项的参数是一个InetAddress。

这个选项 必须在构造函数中指定。

适用于:SocketImpl,DatagramSocketImpl

也可以看看:

常量值:15(0x0000000f)

SO_BROADCAST

Added in API level 1
int SO_BROADCAST

为套接字设置SO_BROADCAST。 该选项启用和禁用进程发送广播消息的能力。 它仅支持数据报套接字,并且仅支持广播消息(例如以太网,令牌环等)概念的网络,并且默认情况下为DatagramSocket设置。

常量值:32(0x00000020)

SO_KEEPALIVE

Added in API level 1
int SO_KEEPALIVE

如果为TCP套接字设置keepalive选项,并且没有数据在两个方向上在任何方向上都在套接字上交换2小时(注意:实际值取决于实施方式),则TCP将自动向对等方发送Keepalive探针。 该探测是对等端必须响应的TCP段。 期望三个响应之一:1.对等体以预期的ACK作出响应。 该应用程序没有通知(因为一切正常)。 TCP将在另外2小时不活动之后发送另一个探测。 2.对等端用RST响应,告诉本地TCP对端主机已经崩溃并重新启动。 插座关闭。 3.没有来自同伴的回应。 插座关闭。 此选项的目的是检测对等主机是否崩溃。 仅对TCP套接字有效:SocketImpl

也可以看看:

常量值:8(0x00000008)

SO_LINGER

Added in API level 1
int SO_LINGER

指定延时关闭超时。 该选项禁用/启用从TCP套接字的close()立即返回。 使用非零整数启用此选项意味着close()将阻塞,等待传输并确认写入对等端的所有数据,此时套接字将正常关闭。 在达到延时超时后,使用TCP RST 强制关闭套接字。 超时时间为零的选项会立即强制关闭。 如果指定的超时值超过65,535,它将减少到65,535。

仅对TCP:SocketImpl有效

也可以看看:

常量值:128(0x00000080)

SO_OOBINLINE

Added in API level 1
int SO_OOBINLINE

当设置OOBINLINE选项时,套接字上接收到的任何TCP紧急数据将通过套接字输入流接收。 当该选项被禁用时(这是默认设置),紧急数据将被静默丢弃。

也可以看看:

常量值:4099(0x00001003)

SO_RCVBUF

Added in API level 1
int SO_RCVBUF

设置提示传入网络I / O平台使用的基础缓冲区的大小。 在集合中使用时,这是从应用程序向内核提供的关于要通过套接字接收数据的缓冲区大小的建议。 在get中使用时,必须在接收此套接字上的数据时返回平台实际使用的缓冲区的大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl

也可以看看:

常量值:4098(0x00001002)

SO_REUSEADDR

Added in API level 1
int SO_REUSEADDR

为套接字设置SO_REUSEADDR。 这仅用于Java中的MulticastSockets,并且默认情况下为MulticastSockets设置。

适用于:DatagramSocketImpl

常量值:4(0x00000004)

SO_SNDBUF

Added in API level 1
int SO_SNDBUF

设置平台用于传出网络I / O的底层缓冲区的大小。 在set中使用时,这是从应用程序向内核提出的关于要通过套接字发送数据的缓冲区大小的建议。 在get中使用时,在发送此套接字上的数据时,它必须返回平台实际使用的缓冲区的大小。 适用于所有套接字:SocketImpl,DatagramSocketImpl

也可以看看:

常量值:4097(0x00001001)

SO_TIMEOUT

Added in API level 1
int SO_TIMEOUT

设置阻止套接字操作的超时时间:

 ServerSocket.accept();
 SocketInputStream.read();
 DatagramSocket.receive();
 

该选项必须在进入阻塞操作之前设置才能生效。 如果超时过期并且操作将继续阻塞,则引发java.io.InterruptedIOException 在这种情况下,套接字未关闭。

适用于所有套接字:SocketImpl,DatagramSocketImpl

也可以看看:

常量值:4102(0x00001006)

TCP_NODELAY

Added in API level 1
int TCP_NODELAY

禁用此连接的Nagle算法。 写入数据到网络不会被缓存,以确认之前写入的数据。

仅适用于TCP:SocketImpl。

也可以看看:

常数值:1(0x00000001)

Public methods

getOption

Added in API level 1
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)

也可以看看:

setOption

Added in API level 1
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.Integer
If 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
 

Any option can be disabled using this method with a Boolean(false):
 s.setOption(TCP_NODELAY, new Boolean(false));
    // OK - disables TCP_NODELAY
 s.setOption(SO_LINGER, new Boolean(false));
    // OK - disables SO_LINGER
 

For an option that has a notion of on and off, and requires a non-boolean parameter, setting its value to anything other than Boolean(false) implicitly enables it.
Throws SocketException if the option is unrecognized, the socket is closed, or some low-level error occurred

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

也可以看看:

Hooray!