繁体   English   中英

C ++中的Gsoap错误

[英]Gsoap Error in C++

我正在使用gsoap在C ++中创建一个肥皂服务器。 消息通过Java编写的总线进行路由。 服务器和总线都是多线程的。 一切正常,一次通过系统发送一条消息。 如果我启动3个客户端,每个客户端都尽可能快地发送消息,那么大约3500条消息就可以了。 然后,我开始定期接收“一次只允许一个套接字连接”。 来自gsoap代码的错误。 通常,大约4000条消息中的3950条可以通过OK。 在最近的500个发送中发生了全部50个失败。

  1. 为什么这些错误会在多次发送后发生,而不是在发送开始时发生? 发送速率不会增加。

  2. 在说什么 我找不到该错误的任何解释,而且我不清楚其含义。

  3. 有人成功对gsoap应用程序进行了多线程处理吗?

这是我的服务器代码。

long WINAPI threadGO(soap *x);

int main(int argc, char* argv[])
{
HANDLE thread1;
int m, s; /* master and slave sockets */
struct soap *soap = soap_new();
if (argc < 2)
soap_serve(soap); /* serve as CGI application */
else
{ 
  m = soap_bind(soap, NULL, atoi(argv[1]), 100); 
  if (m < 0)
  { 
      soap_print_fault(soap, stderr);
      exit(-1);
  }
  fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
  for (;;)
  {
     s = soap_accept(soap);
     thread1 =    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadGO,soap_copy(soap),0,NULL);
  }
}
soap_done(soap);
free(soap);
return 0;
}

long WINAPI threadGO(soap *x)
{
soap_serve(x);
soap_end(x);
return 0

;
}

我相信您在threadGO中存在资源泄漏。

soap_copy()复制soap结构后,我相信需要通过调用以下所有命令来释放它:

soap_destroy(x);
soap_end(x);
soap_free(x);

具体来说,缺少对soap_done()调用soap_done()soap_free() )调用)会调用soap_closesock() ,从而关闭套接字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM