很久以前参考了https://www.genivia.com/doc/soapdoc2.html 中的一段:How to Create a Multi-Threaded Stand-Alone Service 完成了一个简单多线程服务器的编写。但是一直以来服务器运行一段时间,接收一定量的请求后,就会出现服务器再也不返回的情况。怀疑过是不是socket数量不够用了,后来跟踪发现还能正常listen。怀疑是不是工作线程异常退出了,补充了所需的日志,也没有。后来查询到,有人曾经也问过这个问题:https://sourceforge.net/p/gsoap2/bugs/844/ 在gsoap的代码中加入日志,确实是在soap_serve卡住了,而卡住的位置就是在recv函数,位于文件stdsoap2.cpp的933行(72行):
1 |
|
按照上面的网址链接,解决此问题的办法是:You have to set the recv_timeout and send_timeout values as well. I/O may block otherwise更神奇的是在这个文档中:https://www.genivia.com/tutorials.html 例子里面的soap则添加了超时处理!
1 | int main() |
我就想问官方,你的例子为啥不能一起更新呢?