はい iphlpapi.dll です。
呼び出しているのは、クライアントを MAC アドレスでも制限できるように
する機能を持たせたためです。
呼び出し回数に制限が有るように思ったのは、その回数だけ呼び出すと正確
に落ちるからです。
同じ API を WindowsNT 系で使用しても落ちません。
何れにしても Windows9X 系だと MAC アドレスは判らないので 9X 系では
該当機能は無効にして呼ばない事にしました。
傘地蔵さん、
SendARP() は iphlpapi.dll の関数ですよね(?)。
この関数は必ず呼び出されるのですか?
また、呼び出し回数に制限があるというのはちょっと不思議ですね。どこを見ると回数制限があるように見えますか?
以前に SOCKET の生成には制限が有るのかと書いた件です。
その後の調査で、原因は SendARP の呼び出しに原因が有ることが判りました。
SendARP は Windows9x 上だと 128Ki 回の呼び出ししか出来ないように
見えます。
傘地蔵さん、
なるほど、スレッドについては勘違いしていました。
Windows98 でシステムリソースは変化していませんか?
中田さん、お付き合い有難うございます。
テストでは、同時に起こすスレッド数は一つです。
スレッドを起こして終了させることを繰り返していると数千回でエラーになるのです。
同じバイナリを WindowsXP で動作させると問題は生じないので、プログラム自体に
は問題は無いように思うのです。
傘地蔵さん、
AN HTTPD ではスレッドの最大数を(50に)制限しています。
ソケットの最大数は Windows9X でも SHORT_MAX 程度は作れるみたいです。
anhttp では、何か対策を行われているのでしょうか。
エラーになるとアプリケーションの再起動でも回復できず、システム(Windows)
を再起動する必要が有ります。
傘地蔵 さん、
ソケットの最大数はありそうですね。
あるいは、Windows9x 系のシステムリソースの問題かもしれませんが。
自分でもサーバもどきを作ってみたのですが、連続アクセスを行なうと落ちます。
未だ骨格部分ができたところです。スレッドの起こし方などを確認しておこうと、
連続アクセスのテストを行なったところ 10000 回程度のアクセスでソケットが
作れずエラーになって止まります。止まった時は、他のアプリケーションを起動しよう
とするとメモリ不足で起動できません。
上記のテストは Windows98SE でのテストですが、同じバイナリを WindowsXP
上で動作させると問題は無いようです。タスクモニタを見ていても、ハンドルや
メモリを食い潰している様子はありません。
Windows9X 系だとスレッドを起こす頻度やソケットを作成する数などに制限が
有るのでしょうか。