Oke, saya menemukan solusinya.. Terima kasih kepada Will dan PRR ( rekan kerja saya ).
Saya tidak bisa mulai utas baru pada setiap kueri, karena ini adalah aplikasi waktu nyata, yang seharusnya memproses 1000+ pesan per detik..(Lagi pula, terima kasih kepada R.. untuk ide).
Juga, tidak mungkin untuk mengakhiri koneksi melalui perpustakaan, atau untuk membatalkan/membunuh kueri, karena masalahnya ada di server DB..
Dan inilah solusi brute-force, tetapi masih jauh lebih baik daripada _EXIT( FAILURE )
:Inilah pertanyaan terkait:"Cara memaksa penutupan socket di Linux?"
- jadi, saya baru saja menutup soket menggunakan panggilan sistem.
CATATAN Penting :(terima kasih Will) - Ternyata, pembungkus perpustakaan MySQL kami memiliki tanda "fail-safe", sehingga pada soket tertutup (atau kesalahan kritis lainnya), ia mencoba "memecahkan" masalah, sehingga membuka kembali soket , dengan sendirinya, dalam kasus saya. Jadi, saya baru saja mematikan opsi ini dan semuanya baik-baik saja sekarang - eksekusi dihentikan karena pengecualian - ini adalah cara "paling lembut" untuk melakukan ini.
Ini harus dilakukan melalui utas lain, tentu saja - a pengatur waktu, misalnya.
EDIT: Batas waktu benar-benar berfungsi untuk versi setelah 5.0.25. Tapi, setidaknya pada RHEL4 dan RHEL5, batas waktu tiga kali lipat untuk beberapa alasan! Misalnya, jika beberapa batas waktu diatur ke 20 detik, batas waktu sebenarnya adalah ~60 detik..
Juga, hal penting lainnya adalah, batas waktu ini (seperti opsi lainnya) HARUS disetel setelah mysql_init
dan sebelum mysql_connect
atau mysql_real_connect
.