これを行う方法はありません。私は多くのアプリケーションで次のコードを使用しています。コードは決してオリジナルではありませんが、大丈夫です。この関数にリトライを追加する必要があるかもしれないことに注意してください。サーバが起動していてもfalseを返すことがあります。 OPにまだ検索からこのページを見つける誰が使用するもの
private static bool _TryPing(string strIpAddress, int intPort, int nTimeoutMsec)
{
Socket socket = null;
try
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, false);
IAsyncResult result = socket.BeginConnect(strIpAddress, intPort, null, null);
bool success = result.AsyncWaitHandle.WaitOne(nTimeoutMsec, true);
return socket.Connected;
}
catch
{
return false;
}
finally
{
if (null != socket)
socket.Close();
}
}
[それを行うには良い方法がないように思える。](http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/2281199d-cd28-4b5c-95dc -5a888a6da30d /) –
これはできません。タイムアウトは送信操作に対してのみ調整できます。独自のタイムアウトメカニズムを実装することは不可能ですが、より長いタイムアウト値を達成することはできません。 – Mervin