Как я могу установить время ожидания сокета в Java?

У меня проблема с обработкой сокета в Java. Я использую TCP-сервер с несколькими клиентскими подключениями.

По соображениям производительности я использовал простой пул потоков для обработки пакетов.

Пожалуйста, смотрите код ниже

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);
        }
}

несколько потоков могут получить доступ кsendToClient.

этот код обычно работает нормально, но иногда (возможно, при флуде?) он зависает без каких-либо исключений, пока я не завершу соединение клиента вручную. После того, как я закрыл соединение клиента, я получил тонны исключенияSocketException: Broken pipe отout.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]

Моя главная проблема заключается в том, что сервер может зависать, пока клиент не завершит соединение. Я предполагаю, что если я смогу установить тайм-аут для записи, то Сервер мог бы закрыть соединение самостоятельно, но я не мог найти подходящий способ для этого.

я пыталсяsocket.setSoTimeOut(); но, похоже, только для получения данных от клиента.

Любой намек или совет будут очень благодарны. Пожалуйста, дайте мне знать, если вам понадобится больше кода или информации. Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос