3

この呼び出しは非常に短い時間の後に戻るはずですが、一部のマシンでは、不可解にも1秒近くかかります。誰かがこの問題を見たことがありますか。ループバックアドレスを使用しているので、ネットワークは見えないはずです。

4

1 に答える 1

0

問題は、おそらくウィンドウ ソケットの実装内のどこかにあります。OS の観点からは、呼び出しclosesocket(またはCloseHandle) は、ドライバーの「デバイス」オブジェクトを解放することと同等です。ほとんどのドライバーは、この要求を即座に (同期的に) 処理し、必要に応じて (潜在的な) 未処理の I/O をすべて中止します。ただし、「愚かな」ドライバーは、何かが完了するまでブロックする場合があります。

それが私がすることです:

  • プログラムを (タスク マネージャーで) 終了してみてください。終了まで時間がかかりますか?(そうであれば、ドライバーによってロックされているようです)。
  • ストリーム ソケット (TCP など) について話している場合は、SO_DONTLINGERオプションを使用してみてください。つまり、保留中のデータがすべてピアに送信されるまで待機しないように指定します。
于 2012-04-05T07:14:09.900 に答える