それは正常な動作です。
この状況を回避するために、無限の受信タイムアウトを設定できます (無限がデフォルトです。ReceiveTimeout プロパティとして 0 を明示的に設定できます)。ただし、相手側にクライアントが実際に存在しない場合、プログラムの応答性に問題が生じる可能性があります。正確なユースケースによっては、接続の失敗をログに記録してから、新しい接続を作成する方がよい場合があります。
私が通常使用するパターンは次のとおりです(疑似コードっぽい。接続メソッドは通常、例外処理を使用してインライン化されます)。
while (!done)
{
// Try to connect with a reasonable ReceiveTimeout
connected = EstablishTheConnectionAndHandleAnyException();
if (connected)
{
// Do useful work
done = true;
}
else
{
// Receive timeout
// If interactive, give the user an opportunity to abort
// by setting done = true
// At least log the situation
}
}