Frage

Ich verwende gsoap einen SOAP-Server in C ++ zu erstellen. Die Nachrichten werden über einen Bus geschrieben in Java geleitet. Sowohl der Server als auch der Bus sind multithreaded. Alles funktioniert gut das Senden einer Nachricht zu einem Zeitpunkt durch das System. Wenn ich drei Kunden jeweils das Senden von Nachrichten beginnen, so schnell wie möglich alles ist für etwa 3500 Nachrichten in Ordnung. Dann fange ich an regelmäßigen Empfang „zu einer Zeit erlaubt nur eine Socket-Verbindung.“ Fehler aus dem gsoap Code. Typische etwa 3950 von 4000 Nachrichten, die es durch OK machen. Bei allen 50 Ausfälle in den letzten 500 passiert sendet.

  1. Warum würden diese Fehler auftreten, nachdem viele senden, aber nicht am Anfang des Sende? Die Rate des Sende nicht erhöht.

  2. Was spricht es? Ich kann keine Erklärung des Fehlers finden, und seine Bedeutung ist mir nicht klar.

  3. Wer erfolgreich eine gsoap App multithreaded?

Hier ist mein Server-Code.

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

;
}
War es hilfreich?

Lösung

Ich glaube, Sie ein Ressource-Leck in threadGO haben.

Nach dem Kopieren der Seife Struktur mit soap_copy(), ich glaube, es befreit werden muss von allen Aufruf:

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

Insbesondere die fehlende Aufruf soap_done() (die von soap_free() genannt wird) ruft soap_closesock(), die die Buchse geschlossen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top