Java支持BSD-style的选项.
TCP_NODELAY
用于设置是否禁用Nagle算法.
Nagle算法用于自动合并大量小的缓冲区消息;这个过程(称为nagling)通过减少必须发送的包的数量来提高网络应用程序系统的性能.
仅用于TCP: SocketImpl.
SO_BINDADDR
套接字绑定的本地地址,类型为INADDR_ANY
.套接字创建时绑定的地址无法在之后修改.
可用于: SocketImpl, DatagramSocketImpl
SO_REUSEADDR
这个选项在Java中仅用于标识多播套接字.多播套接字默认配置该选项.
可用于: DatagramSocketImpl
SO_BROADCAST
用于关闭或开启数据报套接字的广播功能
IP_MULTICAST_IF
设置发送多播数据包的传出接口.用于多个网络接口的主机希望使用系统默认值以外的其他值.
可用于广播: DatagramSocketImpl
IP_MULTICAST_IF2
和IP_MULTICAST_IF
一样,但是可以支持IPV4和IPV6.
IP_MULTICAST_LOOP
此选项启用或禁用多播数据报的loopback. 多播套接字默认启用此选项.
IP_TOS
此选项在IP头为TCP或UDP套接字设置服务类型(type-of-service)或流量类(traffic class)字段
SO_LINGER
指定延迟关闭超时. 此选项禁用/启用从TCP套接字的close()
立即返回. 使用非零整数超时启用此选项,意味着close()
将阻塞,等待向对等方发送和确认所有写入的数据, 之后套接字将被优雅地关闭. 在到达延迟超时时, 使用TCP RST强制关闭套接字. 启用超时为0的选项会立即强制关闭. 如果指定的超时值超过65,535, 则会减少到65,535.
仅对TCP: SocketImpl有效
SO_TIMEOUT
设置阻塞套接字操作的超时:
ServerSocket.accept();
SocketInputStream.read();
DatagramSocket.receive();
必须在进入阻塞操作之前设置, 该选项才能生效. 如果超时过期, 操作将继续阻塞, java.io.InterruptedIOException
. 在这种情况下, 套接字不会关闭.
适用于所有的套接字实现:SocketImpl
,DatagramSocketImpl
SO_SNDBUF
设置平台底层I/O发送缓冲区大小.
当setSendBufferSize
时, 这是应用程序向内核提供的关于通过套接字发送数据时使用的缓冲区大小的建议.
当getSendBufferSize
时, 这必须返回平台在此套接字上发送数据时实际使用的缓冲区的大小.
适用于所有的套接字实现:SocketImpl
,DatagramSocketImpl
.
SO_RCVBUF
设置平台底层I/O接收缓冲区大小.
当setReceiveBufferSize
时, 这是应用程序向内核提供的关于通过套接字接收数据时使用的缓冲区大小的建议.
当getReceiveBufferSize
时, 这必须返回平台在此套接字上接收数据时实际使用的缓冲区的大小.
适用于所有的套接字实现:SocketImpl
,DatagramSocketImpl
.
SO_KEEPALIVE
当为一个TCP套接字设置了keepalive选项,并且在两个小时内套接字之间没有任何数据交换(注意:实际的值取决于实现),TCP会自动向对等端发送一个keepalive探测。这个探测是一个TCP段,对等端必须响应它。
预期会有三种响应:
SO_OOBINLINE
当设置OOBINLINE
选项时,在套接字上接收到的任何TCP紧急数据(TCP URG)都将通过套接字输入流接收. 当该选项被禁用时(这是默认值), 紧急数据将被悄悄地丢弃(不通知应用程序).
SO_BACKLOG
backlog参数是套接字上挂起连接的最大数量. 它的确切语义是特定于实现的. 具体地说, 实现可以设置最大长度, 也可以选择忽略参数. 如果backlog参数的值为0或负值, 则使用特定于实现的缺省值.
ServerSocketChannel.java
public abstract ServerSocketChannel bind(SocketAddress local, int backlog)
throws IOException;
java.net.SocketOptions
Javadoc原文:https://www.cnblogs.com/onion94/p/Java-Socket-Options.html