レス遅くなり申し訳ありません。

> 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。
> または接続済みのホストが応答しなかったため、確立された接続は失敗しました。
エラーはこんな感じです。

遅延を伸ばせば期待通りになります。

wiresharkの使い方もよくわからず、tcpダンプとかちょっとレベルが高くて無理なので、
あれから試行錯誤してみたところわかったことが1つありました。
チェックに使うサーバ郡は、応答が返って来ないサーバのほうが多いぐらいなのですが、
その中から返ってきたもののみを抽出して、再度チェックしたところ、
全てのサーバが0.1秒でも問題なく返ってきました。
>>632のコードで全部ifの中を通ってきたということなのですが、
ひょっとしたらfcloseしないことが何か関係しているのでしょうか?

スレッド使えというのはもっともな意見ですね。
とりあえず今回の問題の原因が気になるので、もうちょっと調べてみようと思います。