Программирование на сокете C, отправка - PullRequest
1 голос
/ 27 февраля 2012

Я написал сервер, который, когда браузер пытается подключиться к определенным сайтам, проверяет черный список и отправляет обратно 404, однако, когда я вызываю send (), ошибки нет, но сообщение не появляется в сети.браузер, если я не закрою соединение?

Есть ли какие-нибудь советы?

Прием соединения из браузера

while(1){
    connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen);
    if (connfd == -1) {
        perror ("unable to accept");
        return 1;
    }
    printf("%s:%d connected\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));
    printf("%d",threadIndex);
    pthread_create(&(thread[threadIndex++]), NULL, processRequests, (void *)connfd);

    }

Метод Запросы процесса отправляет фрагмент:

if(blacklisted ==1){
                    printf("is blacklisted\n");
                    char *response404 = "HTTP:/1.1 404 not avaliable\r\n\r\n";

                    printf("%s\n",response404);
                    int len, bytes_sent;
                    len = strlen(response404);
                    bytes_sent = send(connfd, response404, len, 0);
                    if(len != bytes_sent){
                        perror("message length doesn't match");

                    }
            }

1 Ответ

3 голосов
/ 27 февраля 2012

Браузер ожидает закрытия соединения, прежде чем он анализирует и показывает страницу.

Нет пути назад.

в HTTP / 0.9 и 1.0, соединение закрывается после одной пары запрос / ответ.

В HTTP / 1.1 был введен механизм keep-alive, где соединение можно было повторно использовать для более чем одного запроса.

Примечание: Техника Keepalive здесь не используется, поскольку вы отправляете одну страницу для каждого клиента, подключающегося к определенному местоположению.

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