TcpClient tcp = new TcpClient();
bool failed = false;
IAsyncResult connection = tcp.BeginConnect(host, port, null, null);
if (!connection.AsyncWaitHandle.WaitOne(_connectTimeout))
{
failed = true;
if (tcp.Client.Connected)
{
tcp.GetStream().Close();
tcp.Close();
}
}
else
{
if (!tcp.Connected)
{
failed = true;
if (tcp.Client.Connected)
{
tcp.GetStream().Close();
}
tcp.Close();
}
}
return tcp;
Код выше - это то, что я называю для подключения к хосту, порту прокси.
WaitOne
по сути является тайм-аутом. Если он возвращает false, время истекло.
Мой вопрос здесь, правильно ли я звоню Close
/ Dispose
/ GetStream().Close
и т. Д. При каждом условии? Из того, что я могу сказать, я должен использовать EndConnect
здесь с переменной подключения, но где бы я ни пытался его разместить, он дает мне SocketException
, говорящее, что целевой машине отказано в подключении, но она либо не подключена, либо она уже подключена .