Limite de conexão Java ServerSocket?
Eu estava executando alguns testes com sockets e encontrei um comportamento estranho: um ServerSocket recusará conexões depois que o 50th Socket do cliente se conectar a ele, mesmo que o soquete do cliente seja fechado antes do próximo ser aberto, e mesmo se um atraso for adicionado entre conexões.
O programa a seguir é o meu código experimental, que em seu estado atual, não gera exceções e termina normalmente. No entanto, se o tamanho da matriz deSocket[] clients
é aumentado para além de 50, quaisquer soquetes de cliente que tentem se conectar após a 50ª conexão serão recusados pelo soquete do servidor.
Questão:Por que 50 é a contagem em que as conexões de soquete são recusadas por um soquete de servidor?
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(2123)) {
Socket[] clients = new Socket[50];
for (int i = 0; i < clients.length; i++) {
clients[i] = new Socket("localhost", 2123);
System.out.printf("Client %2d: " + clients[i] + "%n", i);
clients[i].close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Eu executei testes onde outros 50 soquetes se conectam a outro servidor local, e nenhum problema ocorreu com 100 soquetes sendo abertos e fechados, então deduzi que o soquete do servidor está recusando conexões, e não algum limite de abertura de soquetes do cliente, mas Não consegui descobrir por que o soquete do servidor está limitado a 50 conexões, mesmo que elas não estejam conectadas simultaneamente.