Maison  >  Article  >  développement back-end  >  php c扩展的问题请大家帮帮我

php c扩展的问题请大家帮帮我

WBOY
WBOYoriginal
2016-06-23 14:11:221008parcourir


我用php扩展与 c 程序通信, php扩展作为client, c程序作为server且一直在监听所有的连接描述符;
php扩展中如果已经connect成功后, 那么以后的php请求都用同一个socket;
但是我在测试过程中发现,假如server重启,php扩展再也无法正常与server通信, php扩展向server发请求(send)后会接受到 broken pipe的错误;

我在php扩展中做的处理是 假如send 或recv失败 就重新关闭链接重连;

同样的代码我在纯c环境中测试没问题. 但是放在php中 就不行

求帮忙 谢谢


回复讨论(解决方案)

编译扩展后在php中执行不行?

问题根源已找到,
apache会启动多个httpd, 每个httpd都会加载php扩展, 也就是说httpd都会与tcp server 通信
当server 重启后, php请求通过某个httpd向server send消息, 返回一个broken pipe信号, httpd进程默认被终止. 然后php请求又通过其他httpd发请求,其他的httpd同样的也会被终止, 当所有的httpd都被重启后, 通信就不会再产生broken pipe信号

问题根源已找到,
apache会启动多个httpd, 每个httpd都会加载php扩展, 也就是说httpd都会与tcp server 通信
当server 重启后, php请求通过某个httpd向server send消息, 返回一个broken pipe信号, httpd进程默认被终止. 然后php请求又通过其他httpd发请求,其他的httpd同样的也会被终止, 当所有的httpd都被重启后, 通信就不会再产生broken pipe信号


顺便问一下,楼主有什么php扩展的资料不??
能否共享一下?

http://www.laruence.com/2009/04/28/719.html
还有一个
PHP内核介绍及扩展开发指南
自己百度吧

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn