No hay una forma directa de lograrlo, pero una forma de hacerlo puede ser tener un método independiente que pueda probar la conexión.
static bool TestConnection(string ipAddress, int Port, TimeSpan waitTimeSpan)
{
using (TcpClient tcpClient = new TcpClient())
{
IAsyncResult result = tcpClient.BeginConnect(ipAddress, Port, null, null);
WaitHandle timeoutHandler = result.AsyncWaitHandle;
try
{
if (!result.AsyncWaitHandle.WaitOne(waitTimeSpan, false))
{
tcpClient.Close();
return false;
}
tcpClient.EndConnect(result);
}
catch (Exception ex)
{
return false;
}
finally
{
timeoutHandler.Close();
}
return true;
}
}
Este método sería utilizar un WaitHandle que esperar a que el período de tiempo especificado para obtener la conexión establecida, si se conecta en el tiempo, que cerrará la conexión y vuelta verdad, de lo contrario, sería tiempo de espera y de retorno falso.
[Parece que no hay una buena manera de hacerlo.] (Http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/2281199d-cd28-4b5c-95dc -5a888a6da30d /) –
No es posible. El tiempo de espera solo se puede ajustar para las operaciones de envío. Por supuesto, es posible implementar su propio mecanismo de tiempo de espera, pero no puede lograr valores de tiempo de espera más largos. – Mervin