babble.cがgcc 14でコンパイルできないのは興味深いね: babble.c: 関数 ‘main’ 内: babble.c:651:40: エラー: ‘pthread_detach’ の引数1を渡すと、キャストなしでポインタから整数に変換される [-Wint-conversion] 651 | pthread_detach(&thread); | ^~~~~~~ | | | pthread_t * {aka long unsigned int *} babble.c:77からインクルードされたファイル: /usr/include/pthread.h:269:38: 注意: 期待されるのは ‘pthread_t’ {aka ‘long unsigned int’} だけど、引数は ‘pthread_t *’ {aka ‘long unsigned int *’} 269 | extern int pthread_detach (pthread_t __th) __THROW; 著者はデフォルトでその警告を表示しないコンパイラを使っているか、デフォルトでその警告でエラーが出ないコンパイラを使っているんだろうね。でも、プログラムがクラッシュしないのは驚きだよ(少なくとも、最終的にメモリが足りなくならないのも驚きだね。libcが実際にそのスレッドをデタッチできないだろうし、pthread_join()が呼ばれることもないから)。このバイナリはCで手動のテキスト解析や文字列操作をたくさんやってるから(基本的なHTTPサーバーを実装することも含めて)、少なくとも特権のないユーザーとして実行することをおすすめするよ(著者も提供されたsystemdユニットファイルで暗に推奨してるし)、コンテナ内で実行するのがいいかもね(絶対に安全とは言えないけど、何もしないよりはマシかも)。このプログラムはsprintf()のような安全でないC関数も使ってる。一つのインスタンスをざっと見た感じでは、その使い方は確かに安全そうだけど、そういうのはプログラム全体の安全性に対して赤信号が点灯するよね。リクエストをすごく早く処理するけど、各リクエストを処理するために作成する同時スレッドの数に制限がないみたいだから、注意が必要だね。