Вы говорите, что используете java.net
, поэтому я предполагаю, что вы используете что-то вроде java.net.ServerSocket
.Если вы вызовете setSoTimeout в вашем экземпляре ServerSocket
, вы сможете установить таймаут для вашего сокета.Затем, когда вы блокируете во время звонков на принять , ваш ServerSocket
будет отслеживать время ожидания.Как видно из документации, accept выдает SocketTimeoutException
, если время ожидания определено и время ожидания превысило время ожидания.Итак, у вас получится что-то вроде этого (извините за то, что я немного заржавел на Socket
с):
try(ServerSocket ssock = new ServerSocket(...))
{
ssock.setSoTimeout(10_000); // 10 second timeout
while(true)
{
Socket csock = ssock.accept();
methodToStartThreadThatHandlesClientSocket(csock);
}
}
catch(SocketTimeoutException ste)
{
//handle socket timeout
}
catch(Exception other)
{
//handle other exceptions
}