Я новичок в обеих розетках и резьбе. У меня есть этот код:Розетки и нитки с использованием C
listen(socket_fd, 20);
/* Looooop */
while (1) {
newsocket_fd = accept(socket_fd,
(struct sockaddr *) &client_addr,
&client_len);
if (newsocket_fd < 0) {
error("ERROR on accept");
}
pthread_t thread;
pthread_create(&thread, NULL, run_thread, (void *) newsocket_fd);
pthread_join(thread, NULL);
}
Как я могу начать новый поток для каждого нового соединения, а не для каждого запроса? Эти потоки должны запускаться, когда приходит новое соединение, и эти потоки должны ждать запросов, обрабатывать эти запросы и, наконец, возвращаться, когда соединение закрыто. Для каждого соединения должен быть один поток. Вот код для run_thread
:
void
*run_thread(void *ptr) {
char buffer[256];
bzero(buffer, 256);
int n;
n = read((int) ptr, buffer, 255);
if (n < 0) error("ERROR Reading from socket");
printf("%s\n\n**********\n\n", buffer);
/* Parse buffer and return result */
char *result;
{
/* First, determine command, 4 characters */
/* (much code) */
}
n = write((int) ptr, result, strlen(result));
if (n < 0) error("ERROR Writing to socket");
}
Может кто-нибудь мне помочь? Благодарю.
Использование потоков таким образом не очень хорошо масштабируется. Лучше использовать цикл 'select' для принятых соединений. – bstpierre
Не забудьте закрыть дескриптор файла сокета перед завершением потока. –