Я создаю темы в программе для каждого входящего клиентского соединения.во время стресс-тестирования с 400 параллельными соединениями я получил ошибку 12 от pthread_create.я знаю, что это может случиться при исчерпании ресурсов, но не при 400 соединениях.так почему же это?
#define MAX_CONNECTIONS 1000
pthread_t tid[MAX_CONNECTIONS];
int i = 0;
while(1) {
//Accept call creates a new socket for the incoming connection
addr_size = sizeof serverStorage;
// allocate socketfd on the heap to avoid nasty race conditions
int * socketfd;
socketfd = malloc(sizeof(int));
*socketfd = accept(listenfd, (struct sockaddr *) &serverStorage, &addr_size);
//create a thread for each client request and assign the client request to it for processing
//the main thread can now serve the next request
int err = pthread_create(&tid[i], NULL, socketThread, socketfd);
if(err) {
slog_error(0,"Failed to create thread %d",err);
exit(3);
}
if( i >= MAX_CONNECTIONS)
{
i = 0;
while( i < MAX_CONNECTIONS )
{
pthread_join(tid[i++],NULL);
}
i = 0;
}
всплывающая часть темы
if(injector) {
DEBUG slog_debug(0, "injector reached");
DEBUG slog_debug(0,"Starting injector helper %s",injector_command);
errno = 0;
if ( (pop = popen(injector_command, "w") ) == NULL ) {
slog_error(0,"popen injector FAILED continue without injection %d",errno);
pop = 0;
}
if (pop) {
DEBUG slog_debug(0, "print to injector reached");
if( (bytes = fwrite(nm_data,1,strlen(nm_data),pop)) != strlen(nm_data)) {
slog_error(0,"Failed to write to injector %s,%s,%d",hostname,bytes,errno);
pop = (FILE *)0; /* stop writing */
exit(1);
}
}
fflush(pop);
pclose(pop);
}