Является ли «сообщение» исключения культурно независимым? - PullRequest
2 голосов
/ 08 апреля 2010

В приложении, которое я разрабатываю, мне нужно обрабатывать время ожидания сокета иначе, чем обычное исключение сокета. Проблема в том, что многие различные проблемы приводят к 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"

Этот вопрос имеет общую и специфическую часть:

  1. допустимо ли писать условную логику, основанную на текстовом представлении исключения?
  2. Есть ли способ избежать необходимости обработки исключений?

Пример кода ниже ...

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..
    }
}

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

Ответы [ 2 ]

8 голосов
/ 08 апреля 2010

конечно, это так!в SocketException есть больше описательных полей, вам не следует выполнять сравнение строк.http://msdn.microsoft.com/library/system.net.sockets.socketexception_members.aspx, особенно:

  • ErrorCode
  • NativeErrorCode
  • SocketErrorCode
2 голосов
/ 08 апреля 2010

Исключения относятся к культуре, у меня есть "немецкие" сообщения об исключениях. Используйте SocketErrorCode.

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