Как поместить дескриптор файла сокета в буфер и продолжить принимать входящие соединения? - PullRequest
0 голосов
/ 23 марта 2012

Я пытаюсь спроектировать многопоточный веб-сервер на C, используя Pthreads, и у меня возникает проблема с получением большего количества входящих соединений без их обслуживания.

Я хочу поместить файловый дескриптор каждого полученного соединения вбуфер должен быть обработан потоком, я использую default accept (2) для принятия клиентских подключений.

я должен использовать select?Любое предложение?

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

Распространенным способом работы многопоточных серверов является создание нового потока сразу после принятия нового соединения и передачи нового сокета этому потоку. Примерно так:

int main(int argc, char *argv[])
{
    /* ... */
    int client_socket = accept(server_socket);

    pthread_create(&thread, NULL, my_connection_handler, (void *) client_socket);
    /* ... */
}

void *my_connection_handler(void *argp)
{
    int socket = (int) argp;

    write(socket, "Hello!\r\n", 8);

    close(socket);

    return NULL;
}
0 голосов
/ 23 марта 2012

Я читал эту статью в эти дни (я не пробовал, но выглядит хорошо): http://www.linuxjournal.com/content/network-programming-enet или тоже свободный.

Если вам нужен код своими руками, посмотрите на (идеи производительности): http://www.kegel.com/c10k.html

...