Вызов Accept () второй раз дает новый сокет для того же клиентского запроса - PullRequest
1 голос
/ 26 сентября 2011

Мне нравится писать серверную программу с двумя потоками, один из которых предназначен для приема запросов и их постановки в очередь.Второй, рабочий поток, для их обработки (я этого еще не написал).Вот псевдокод.

    while (1) {

    newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
    read_from_newsockfd()
    put_in_queue  

    // I am not closing the newsockfd here. If I close it here how 
to I communicate with the client from my second worker thread.
    }

Теперь, когда я отправляю запрос из браузера, второй раз вызывается метод accept (), дающий другой сокет для того же запроса без блокировки.Я попытался отправить второй запрос из другого браузера, я получил ошибку сегментации.Может ли кто-нибудь сказать, пожалуйста, как подойти к этой проблеме?

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Возможно ли, что браузер делает несколько запросов, в частности для /favicon.ico, а также для HTML?

Я предлагаю вам использовать Wireshark , чтобы увидеть, что происходит науровень сети.

0 голосов
/ 26 сентября 2011

Скорее всего, ваш клиент отправляет несколько запросов на несколько ресурсов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...