J'utilise gsoap pour créer un serveur soap en C++. Les messages sont acheminés par un bus écrit en Java. Le serveur et le bus sont tous deux multithreadés. Tout fonctionne bien lorsqu'on envoie un message à la fois dans le système. Si je lance 3 clients qui envoient chacun des messages aussi vite que possible, tout va bien pendant environ 3500 messages. Ensuite, je commence à recevoir des erreurs périodiques "Only one socket connection allowed at a time" du code gsoap. En général, environ 3950 des 4000 messages passent sans problème. Les 50 échecs se produisent dans les 500 derniers envois.
-
Pourquoi ces erreurs se produisent-elles après de nombreux envois, mais pas au début de l'envoi ? Le taux d'envoi n'augmente pas.
-
De quoi parle-t-il ? Je ne trouve aucune explication à cette erreur et sa signification n'est pas claire pour moi.
-
Quelqu'un a réussi à faire fonctionner une application gsoap en multithread ?
Voici le code de mon serveur.
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
;
}