C プログラムと通信するために php 拡張機能を使用します。 php 拡張機能はクライアントとして機能し、C プログラムはサーバーとして機能し、常にすべての接続記述子をリッスンします。
接続が成功した場合、php 拡張機能は次のようになります。後続のすべての php リクエストは同じソケットを使用します
しかし、サーバーが再起動されると、php 拡張機能がサーバーにリクエストを送信した後、サーバーと正常に通信できなくなることがわかりました。 、パイプ破損エラーが発生します
これを php 拡張機能で実行します。解決策は、送信または受信が失敗した場合にリンクを閉じて再接続することです
同じコードを純粋な C 環境で問題なくテストできます。しかし、PHPでは動作しません
助けてくださいありがとうございます
拡張機能をコンパイルしてphpで実行することは可能ですか?
問題の原因が見つかりました。
Apache は複数の httpd を起動し、各 httpd は php 拡張機能をロードします。これは、httpd が TCP サーバーと通信することを意味します
サーバーが再起動されると、php は特定の httpd 経由でサーバーにメッセージを送信すると、壊れたパイプ信号が返され、httpd プロセスがデフォルトで終了します。その後、PHP リクエストが他の httpd リクエストを通じて送信され、すべての httpd が再起動されると、他の httpd も終了します。通信によって壊れたパイプ信号が生成されなくなります
問題の原因が見つかりました。
Apache は複数の httpd を起動し、各 httpd は php 拡張機能をロードします。これは、httpd が TCP サーバーと通信することを意味します。サーバーが再起動され、php が特定の httpd 経由でサーバーにメッセージを送信するようリクエストし、壊れたパイプ信号を返すと、httpd プロセスがデフォルトで終了します。その後、php リクエストは他の httpd リクエストを通じて送信され、他の httpd も送信されます。すべての httpd が再起動されると、通信は壊れたパイプ信号を生成しなくなります
ところで、投稿者は php 拡張機能に関する情報を持っていますか? ?
シェアしてもらえますか?
PHP カーネルの導入と拡張機能の開発ガイドもあります
Baidu 自身で