Определить, подключен ли Сокет UDP, не используя Try-Catch

Рейтинг: 1Ответов: 1Опубликовано: 11.11.2014

Приветствую.

Есть конструкция:

IPEndPoint Address = new IPEndPoint(IPAddress.Parse(Ip), (int)Port);
Socket = new Socket(AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, ProtocolType.Udp);
socket.Connect(Address);
 //Send
byte[] recvData = new byte[1400];
int recv = socket.Receive(recvData);

Если удалённый сервер выключен, кидает исключение на строчки int recv = socket.Receive(recvData);:
Необработанное исключение типа "System.Net.Sockets.SocketException" в System.dll
Дополнительные сведения: Удаленный хост принудительно разорвал существующее подключение.

Каким образом можно избежать исключение, не используя конструкцию Try-Catch (влияет на производительность в моем случае).

Пробовал такое, но не работает:

bool SocketConnected(Socket s)
    {
        bool part1 = s.Poll(1000, SelectMode.SelectRead);
        bool part2 = (s.Available == 0);
        if (part1 && part2)
            return false;
        else
            return true;
    }

Ответы

▲ 3

А чем Вас пугает обработка исключения? Каким образом оно так сильно съедает у Вас производительность? Может, неправильно используете? И как Вам быть в ситуации, когда сервер выключается уже в процессе передачи? Тут по любому будет исключение, и его надо обрабатывать.

Обновление

Так в том то и дело, что проверить, отключён хост у вас или нет, можно только по таймауту или пока сам сервер не скажет вам быстро, что недоступен. Исключения тут ни при чём. Попробуйте поискать настройку таймаута, но тогда вы тоже не можете гарантировать, что сервер просто не тупанул или связь тупит. Сервер может работать, но пинг у него может быть ужасный.