В многопоточном приложении у меня есть один поток, который считывает данные из сокетного соединения до истечения времени ожидания чтения.Затем он устанавливает закрывающий флаг, отправляет себе сигнал прерывания и выполняет некоторую очистку перед выходом.В рамках этой очистки он вызывает close()
на клиентском сокете.
Я подтвердил в отладчике, что на самом деле происходит вызов close()
.Кроме того, это не исключение.Тем не менее, сокет сообщает о подключении.Я знаю, потому что есть другая нить wait
для отключения.Этот поток должен позже повторно подключить его, но этого не происходит, потому что вызов isConnected()
продолжает возвращать true
.
. Это вызывает ситуацию, при которой ни данные не читаются, ни сокет не очищается и снова не подключается.
Если вы звоните Socket.close()
, есть ли способ, который может молча провалиться?