Сокеты C: Что заставило бы функцию accept возвращать -1 - PullRequest
0 голосов
/ 30 октября 2019

Вот код.

char *httpHeader = "HTTP/1.1 200 OK\r\n\n";

/* poll the server for requests */
int client;

for (;;) {
    client = accept(sock, NULL, NULL);

    if (send(client, httpHeader, sizeof(httpHeader), 0) < 0)
        perror("Error");
    else
        printf ("packet send done");
}

Я знаю, что этот сервер запущен и инициализирован, и когда я пытаюсь открыть его через localhost в браузере, он просто загружается, но ничего не происходит ....

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

... и когда я пытаюсь открыть его через localhost в браузере, он просто загружается, но ничего не происходит ...

Это проблема, отличная от acceptвозвращая -1, как заявлено в названии. Вы просто никогда не закрываете сокет и не отправляете действительный ответ HTTP, потому что вы используете sizeof(httpHeader) в качестве длины для отправки. Но sizeof(httpHeader) - это не длина (слегка недопустимого) заголовка, а sizeof(char*), т. Е. Вы отправляете только 8 байт (на 64-разрядных).

C Сокеты: что может вызвать функцию acceptвернуть -1

Как правило, это тот случай, когда сокет сервера каким-то образом недопустим или когда клиент закрыл сокет до того, как accept вернулся в пространство пользователя (соединение выполняется внутри ядра ОС). Проверьте errno для деталей в вашем конкретном случае. Обратите внимание, что errno или perror полезны только в том случае, если accept действительно возвращает -1.

1 голос
/ 30 октября 2019

Если -1 возвращается accept или send, errno установлено (https://en.wikipedia.org/wiki/Errno.h)

После установки errno, вызовитеperror или strerror, чтобы узнать больше о том, что произошло.

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