Я использую gsoap для создания мыльного сервера на C++. Сообщения маршрутизируются через шину, написанную на Java. И сервер, и шина многопоточны. Все работает хорошо, отправляя одно сообщение за раз через систему. Если я запускаю 3 клиента, каждый из которых отправляет сообщения как можно быстрее, все нормально для примерно 3500 сообщений. Затем я начинаю получать периодические «Только одно соединение сокета разрешено за раз». ошибки из кода gsoap. Типично около 3950 из 4000 сообщений проходят через OK. При всех 50 неудачах происходит в последних 500 отправках.Ошибка Gsoap в C++
Почему эти ошибки возникают после многих отправлений, но не в начале отправки? Скорость отправки не увеличивается.
О чем это говорит? Я не могу найти никакого объяснения ошибки, и ее смысл не ясен для меня.
Любое успешно многопоточное приложение 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
;
}