Pregunta

Estoy usando gsoap para crear un servidor SOAP en C++.Los mensajes se enrutan a través de un bus escrito en Java.Tanto el servidor como el bus son multiproceso.Todo funciona bien enviando un mensaje a la vez a través del sistema.Si inicio a 3 clientes, cada uno de los cuales envía mensajes lo más rápido posible, todo está bien para aproximadamente 3500 mensajes.Luego empiezo a recibir periódico "solo una conexión de enchufe permitida a la vez". Errores del código GSOAP.Normalmente, alrededor de 3950 de 4000 mensajes llegan correctamente.Con las 50 fallas ocurriendo en los últimos 500 envíos.

  1. ¿Por qué ocurrirían estos errores después de muchos envíos, pero no al comienzo del envío?La tasa de envío no aumenta.

  2. ¿De qué está hablando?No encuentro ninguna explicación al error y su significado no me queda claro.

  3. ¿Alguien realizó con éxito varios subprocesos en una aplicación gsoap?

Aquí está mi código de servidor.

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

;
}
¿Fue útil?

Solución

Creo que tienes una fuga de recursos en threadGO.

Después de copiar la estructura del jabón con soap_copy(), creo que es necesario liberarlo llamando a todos:

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

En concreto, la llamada perdida a soap_done() (que se llama desde soap_free()) llamadas soap_closesock(), que cierra el enchufe.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top