簡體   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