Как я могу выполнить и записать в стандартный ввод и направить стандартный вывод в сокет?

Я пишу http-сервер для своего школьного проекта и пытаюсь выполнить скрипт CGI. Следующий код успешно выполняет программу cgi, и выходные данные программы отправляются в браузер, но что-то не так с тем, как я отправляю POST-данные. Вот что у меня есть:

    int p[2];
pipe(p);

int pid = fork();

if (pid == 0) {
close(p[1]);

dup2(p[0], STDIN_FILENO);
dup2(socket, STDOUT_FILENO);

execve(path.c_str(), {}, (char**) &env[0]);
} else {
close(p[0]);

string body = req->getBody();
write(p[1], body.c_str(), body.size());

close(socket);
}

Если я правильно понимаю CGI, мне просто нужно установить переменную среды HTTP_CONTENT_LENGTH (что я делаю) и отправить тело запроса в stdin. Я использую pipe, dup2 и напишу правильный способ сделать это?

При публикации в моем тестовом PHP-скрипте массив $ _POST пуст. При публикации в мой тестовый сценарий Perl он просто никогда не отправляет ответ и не завершает работу; Я предполагаю, что это ждет больше стандартного. Если с моим конвейером и dup2ing нет ничего явно плохого, я выложу некоторый скомпилированный тестовый код, который иллюстрирует проблему.

Спасибо!

2

Решение

Трубопровод и dup2ing все в порядке; моей проблемой была моя переменная окружения CGI. Переменная среда-победитель — CONTENT_LENGTH, без префикса HTTP_.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector