さて、私は解決策を見つけました.. 意志に感謝します およびPRR (私の同僚)。
できません これはリアルタイムアプリケーションであり、1秒あたり1000以上のメッセージを処理することになっているため、クエリごとに新しいスレッドを開始します。(とにかく、 R .. アイデアのために)。
また、問題がDBサーバーにあったため、ライブラリを介した接続を終了したり、クエリをキャンセル/強制終了したりすることはできませんでした。
これがブルートフォースソリューションですが、_EXIT( FAILURE )
よりもはるかに優れています :関連する質問は次のとおりです:"強制終了する方法Linuxのソケット?」
-それで、システムコールを使ってソケットを閉じました。
重要な注意 :(ありがとうWill)-MySQLライブラリラッパーには「フェイルセーフ」フラグがあることが判明したため、閉じたソケット(またはその他の重大なエラー)で問題を「解決」しようとするため、ソケットが再度開かれます。 、それ自体で、私の場合。したがって、このオプションをオフにしたところ、すべてが正常になりました。例外が原因で実行が終了します。これは、これを行うための「最もソフトな」方法です。
もちろん、これは別のスレッドを介して実行する必要があります。たとえば、タイマー。
編集: 5.0.25以降のバージョンでは、タイムアウトが実際に機能しています。ただし、少なくともRHEL4とRHEL5では、何らかの理由でタイムアウトが3倍になります。たとえば、一部のタイムアウトが20秒に設定されている場合、実際のタイムアウトは約60秒です。
また、もう1つの重要な点は、これらのタイムアウトが(他のオプションと同様に)必須であることです。 後に設定する mysql_init
および前 mysql_connect
またはmysql_real_connect
。