我在我的一个项目中在 Linux 下使用 gSOAP,并且在使用服务器很长时间时遇到问题(实际上不是很长时间,大约 10 小时后出现此错误......)。我按照前段时间在这里给出的示例进行 gSOAP 中的多线程处理。我创建了一个肥皂服务,然后使用复制方法并将其传递给一个线程。线程函数是这样的:
void MyClass::SoapServer(myservice::Service* soapService)
{
int res = soapService->serve();
if (res != SOAP_OK)
{
// log error
}
soapService->destroy();
soap_free(soapService);
}
几个小时后,当有一个调用 SOAP 函数的常量轮询器时,我在 gSOAP 复制函数中遇到分段错误。下面我附上接受连接并创建线程的代码。
while(true)
{
int error = mySoapService.accept();
if (!soap_valid_socket(error))
{
//error
}
else
{
myservice::Service *soapServiceCopy = NULL;
soapServiceCopy = mySoapService.copy();
// create thread using the SoapServer function
// and pass soapServiceCopy as an argument
}
}
在我看来,肥皂服务清理工作已正确执行,有什么我遗漏的吗?
谢谢