Como definir o tempo limite de gravação do soquete em java?

Eu tenho um problema com a manipulação de soquete em java. Estou executando um servidor TCP com várias conexões de cliente.

Por motivos de desempenho, usei um pool de threads simples para manipular pacotes.

Por favor, veja o código abaixo

public enum LazyWorkCenter {
        instance;

        LazyWorkCenter() {
            lazyWorker = new NamedThreadPoolExecutor(3,3, 0L,TimeUnit.MILLISECONDS, "LazyWorker");
        }
        private ExecutorService lazyWorker ;


        public void executeLazy(Runnable lazyTask) { 
            lazyWorker.execute(lazyTask);
        }

    }

public class TcpServerForClient { 

    DataOutputStream out = null;
    DataInputStream in = null;

    public void onConnect(ServerSocket socket) throws IOException {
        Socket client = server.accept();
        client.setSoTimeout(1000 * 10);
        out = new DataOutputStream(client.getOutputStream());
        in = new DataInputStream(client.getInputStream());
    }

     public void sendToClient( byte[] buffer) {
            Runnable lazy = () -> {
                out.write(buffer);
                out.flush();
            };

            LazyWorkCenter.instance.executeLazy(lazy);
        }
}

vários threads podem acessarsendToClient.

esse código geralmente funciona bem, mas algumas vezes (provavelmente durante a inundação?) Ele trava sem nenhuma exceção até eu desligar a conexão do cliente manualmente. Depois de desligar a conexão do cliente, recebi toneladas de inundações de exceçãoSocketException: Broken pipe deout.write(buffer);

7053555 [LazyWorker-1]  09:57:35.268 [ERROR] [[email protected]:44] - error found
java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method) ~[na:1.8.0_91]
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) ~[na:1.8.0_91]
        at java.net.SocketOutputStream.write(SocketOutputStream.java:153) ~[na:1.8.0_91]
        at java.io.DataOutputStream.write(DataOutputStream.java:107) ~[na:1.8.0_91]
        at java.io.FilterOutputStream.write(FilterOutputStream.java:97) ~[na:1.8.0_91]

Meu principal problema é que o servidor pode travar até que o cliente saia da conexão. Eu acho que se eu puder definir um tempo para escrever, o servidor poderá fechar a conexão por si só, mas não consegui encontrar a maneira apropriada para isso.

eu tenteisocket.setSoTimeOut(); bem, mas parece apenas para receber dados do cliente.

Qualquer dica ou conselho será muito apreciado. Informe-me Se for necessário mais código ou informação para descobrir isso. Desde já, obrigado.

questionAnswers(1)

yourAnswerToTheQuestion