C++ gSOAP**不**关闭插座?
我对gSoap有个问题-它没有关闭插座。。情况是这样的:应用程序工作正常,但当我调用“reload”函数时,它无法重新连接。。下面是一段代码:C++ gSOAP**不**关闭插座?,c++,sockets,soap,gsoap,C++,Sockets,Soap,Gsoap,我对gSoap有个问题-它没有关闭插座。。情况是这样的:应用程序工作正常,但当我调用“reload”函数时,它无法重新连接。。下面是一段代码: soap_destroy( &m_soapObj ); soap_end( &m_soapObj ); soap_done(&m_soapObj); sleep(1); soap_init(&m_soapObj); //m_ptrThis should be initialized already assert( m
soap_destroy( &m_soapObj );
soap_end( &m_soapObj );
soap_done(&m_soapObj);
sleep(1);
soap_init(&m_soapObj);
//m_ptrThis should be initialized already
assert( m_ptrThis != NULL );
m_soapObj.user = &m_ptrThis;
m_soapObj.accept_timeout = nAcceptTimeout;
m_ptrThreadPool->SetNumThreads( nNumThreads );
m_nSocketListener = soap_bind(&m_soapObj, NULL, nPort, nBacklog);
if (!soap_valid_socket(m_nSocketListener))
{
throw Exception(
"Cannot start listening on port: %d", nPort );
}
然后它抛出。。当我尝试使用无soap_时,程序崩溃,因为我没有创建新的soap对象,只是再次初始化它。所以,soap_done应该有用。有趣的是,这并不是每次都会发生
这很奇怪。。紧急:/
提前多谢
编辑问题解决了。非常感谢鸭子 您应该确切地知道抛出了什么错误 您可能从bind()中获得“地址已在使用”错误。您可以尝试通过使用setsockopt()或等效的soap调用以及SO_REUSEADDR选项来纠正这一问题
link提供了一个简明的解释。它抛出了什么错误?看起来您可以使用soap.errnum和soap\u print\u fault()查找。你要提前关上插座吗?您是否正在使用SO_REUSEADDR并很快重新启动?您好,我之前在这里写过,但发生了一些事情,可能是因为网站关闭了。。无论如何非常感谢你!成功了!我加了这么多,一切都很好。。这是一个虚拟的错误,但我对这个gSoap库一点也不熟悉..只是必须修复应用程序中的一个错误,是由其他人编写的..当你没有时间阅读这些第三方库的任何内容时,很难立即修复这样的问题。。非常感谢你的帮助!我试过soap\u print\u fault,它“说”的只是插座无法重新打开。编写此应用程序的开发人员发出了“等待(1);”肥皂洗完之后,但这还不够。应用程序每秒处理500-800个请求,因此我无法设置更长的等待时间。所以,我的意思是,问题真的出在时间上,因为如果我等待大约,比方说,30秒,套接字成功地重新打开了。不管怎样,再次感谢你的帮助@鸭子-如果你愿意,你可以把你的评论作为答案,以便能够接受它并“给”你一些声誉。这真的帮助了我,解决了我的问题,再次感谢(:基里尔·基洛夫-当然,我很高兴它帮助了我,事情解决了。谢谢。