DataInputStream readByte заблокирован / зависает - PullRequest
3 голосов
/ 17 марта 2011

Я смотрю на код для сервера, который создает поток для обработки каждого входящего соединения.Проблема в том, что по некоторым причинам в группе потоков DataInputStream, созданный из сокета, висит на readByte и не выдает никаких исключений.Время ожидания установлено на 60 секунд, поэтому я не уверен, что следующий шаг с этим.

socket.setSoTimeout(timeout);
socketInputStream = socket.getInputStream();
byte connectionOptions = socketDataInputStream.readByte();

Ответы [ 2 ]

2 голосов
/ 17 марта 2011

Вы указали в комментарии, что ждете SocketException.Если это так, вам нужно поймать SocketTimeoutException вместо.Например, этот код будет выводить timeout!, если вы подключитесь к порту 3434 и будете ждать 3 секунды:

try {
    ServerSocket ss = new ServerSocket(3434);
    Socket socket = ss.accept();
    socket.setSoTimeout(3000);
    InputStream socketInputStream = socket.getInputStream();
    DataInputStream dataInputStream = new DataInputStream(socketInputStream);
    dataInputStream.readByte();
} catch (SocketTimeoutException e) {
    System.out.println("timeout!");
}       
0 голосов
/ 17 марта 2011

Проверьте полный дамп потока для взаимоблокировки.
ctrl + break для Windows.
ctrl + | или kill -3 PID для Linux.

или Используйте инструменты jvisualvm или jconsole

timeout значение должно быть в миллисекундах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...