В приложении, которое я разрабатываю, мне нужно обрабатывать время ожидания сокета иначе, чем обычное исключение сокета. Проблема в том, что многие различные проблемы приводят к SocketException
, и мне нужно знать причину.
Не сообщается о внутреннем исключении, поэтому единственная информация, с которой мне приходится работать, это сообщение:
"A connection attempt failed because the connected party did not
properly respond after a period of time, or established connection
failed because connected host has failed to respond"
Этот вопрос имеет общую и специфическую часть:
- допустимо ли писать условную логику, основанную на текстовом представлении исключения?
- Есть ли способ избежать необходимости обработки исключений?
Пример кода ниже ...
try
{
IPEndPoint endPoint = null;
client.Client.ReceiveTimeout = 1000;
bytes = client.Receive(ref endPoint);
}
catch( SocketException se )
{
if ( se.Message.Contains("did not properly respond after a period of time") )
{
// Handle timeout differently..
}
}
Я хочу время от времени прекращать «ожидание новых данных», чтобы мой рабочий поток мог посмотреть, не было ли ему предложено изящно закрыться - я бы предпочел избежать межпотокового завершения сокета обеспечить этот механизм.