Просьба не переносить в Web-Development, т.к. это не html/js/php/mysql - вопрос.
Юзаю библиотеку с http://fastcgi.com/
Сниффером вижу как nginx запихивает в соединение с FastCGI-программой всё что нужно - все заголовки и потом мегабайтный джипег.
<form action="/upload" enctype="multipart/form-data" method="POST">
<input type="test" name="text1" />
<input type="file" name="file1" />
<input type="submit" />
</form>
Принял запрос через
int FCGX_Accept_r(FCGX_Request *request);
Внутри этого запроса есть три «стрима» -> in, out, err. Первый говорит, что у него флаг isReader == 1. У остальных == 0. Потоки имеют тип:
typedef struct FCGX_Stream {
unsigned char *rdNext; /* reader: first valid byte
* writer: equals stop */
unsigned char *wrNext; /* writer: first free byte
* reader: equals stop */
unsigned char *stop; /* reader: last valid byte + 1
* writer: last free byte + 1 */
unsigned char *stopUnget; /* reader: first byte of current buffer
* fragment, for ungetc
* writer: undefined */
int isReader;
int isClosed;
int wasFCloseCalled;
int FCGI_errno; /* error status */
void (*fillBuffProc) (struct FCGX_Stream *stream);
void (*emptyBuffProc) (struct FCGX_Stream *stream, int doClose);
void *data;
} FCGX_Stream;
Для объекта «in» разница между всеми указателями (вверху структуры) равна нулю, кроме разницы между (stop - stopUnget), которая разна примерно 0x500. Если прочитать содержимое памяти начиная с stopUnget до stop, получим дамп входящего FASTCGI-мяса от сервера с FASTCGI-переменными и бинарными структурами, но без «тела» HTTP-запроса, то есть без данных из HTML-формы (multipart/form-data).
Тем не менее, сниффер канала между веб-сервером и fastcgi-приложением показывает отправку данных формы со всеми пирогами веб-сервером по TCP-соединению в направлении fastcgi-приложения.
Короче изучая структуры в файле fcgiapp.h непонятно, откуда достать тело HTTP-запроса.