Я пишу ServerLocator, который в основном транслирует порт, чтобы найти сервер, который ответит IPEndPoint, и мне нужен поиск, чтобы иметь возможность тайм-аута, если ничего не найдено на текущем IPHost, а затем перейти к следующему.
Сейчас я делаю что-то вроде этого (я удалил некоторые части этого кода, поэтому он содержит только то, что необходимо для отображения моей проблемы. Здесь также происходят некоторые привязки клиентов)
string serverIp = string.Empty;
while(string.isNullOrEmpty(serverIp))
{
foreach (IPAddress adress in ipHosts.AddressList)
{
using(Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
{
try
{
client.ReceiveFrom(buffer, ref tempRemoteEP);
//Get server IP
serverIp = tempRemoteEP.ToString().Split(":".ToCharArray(), 2)[0];
break;
}
catch(SocketException e)
{
// We expect connection attempt to time out if we cant find any server on this port and nic. Just continue with the next
if (e.SocketErrorCode == SocketError.TimedOut)
{
continue;
}
}
}
}
}
Это работает, как и ожидалось, за исключением того, что консоль получает спам:
Первое исключение типа «System.Net.Sockets.SocketException» произошло в System.dll
Есть ли хороший способ обработки подобных исключений без спама в консоли?Или я мог бы справиться с этим другим способом, чтобы избежать необходимости исключения из тайм-аута?
Спасибо.