public ServerSocket(int port, int backlog) throws IOException {this(port, backlog, null);}
backlog 最终作用于Linux的参数 tcp_max_syn_backlog
[root@JD1 ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog256[root@JD1 ~]# sysctl -a|grep tcp_max_syn_backlognet.ipv4.tcp_max_syn_backlog = 256
tcp_max_syn_backlog 影响的是 半连接队列和全连接队列的大小


取64和配置值中较大的哪一个。
(somaxconn 推测是 socket max connection 缩写)
[root@JD1 ~]# sysctl -a|grep net.core.somaxconnnet.core.somaxconn = 128[root@JD1 ~]# cat /proc/sys/net/core/somaxconn128


代码测试backlog
import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class ServerMain {public static void main(String[] args) throws IOException {//设置backlog为2, 最多只能有3个客户端(2个在全连接队列中+1个accept的)ServerSocket serverSocket = new ServerSocket(8888, 2);Socket accept = serverSocket.accept();InputStream inputStream = accept.getInputStream();inputStream.read();}}
public class ClientMain {public static void main(String[] args) throws Exception {Socket socket = new Socket();socket.connect(new InetSocketAddress("127.0.0.1", 8888));InputStream inputStream = socket.getInputStream();inputStream.read();}}

