none
.NETからWinSockのLSP(Layered Service Providers)を変更 RRS feed

  • 質問

  • C#でSocketやHttpWebRequestを使って通信するプログラムを作っています。

     

    使用環境によってSocket通信の非同期処理に問題が発生してエラーとなります。

    具体的にはセキュリティソフト等のLSPがソケットの上位にフックしている場合

    非同期リクエストが2~3%の確立で切断されます。

     

    対応として

    http://members.jcom.home.ne.jp/toya.hiroshi/winsock2/index.html?simultaneous_access_to_multiple_transport_protocols_2.html

     

    SDKのSporder.exeを使用してセキュリティソフトのLSPより上位にWinsock標準のLSPを移動することで解決することを確認しています。セキュリティソフトのバージョン等により新しい規格での非同期通信に完全対応できていないことが問題のようです。要するにサードベンダーのLSPを使用させたくありません。

     

    そこで、C++のネイティブでソケットを使えば上記SporderのWin32APIで回避できるのですが、C#のマネージドコードから実現する方法がわかりません。

     

    ・使用するプログラムのみLSPの優先順を変えて他のプログラムに影響を出したくない

    ・セキュリティソフトのバージョンアップやアンインストール・停止は不可能

    この条件で対応を考えております。HttpWebRequestを使っているのでWin32でプログラムを書き直すのはかなり厳しいです。

    ご教授ください。

    2008年7月5日 15:06