Проблема с выходом модуля nginx? Как это исправить?

Я новичок в nginx и пытаюсь разработать простой модуль nginx, в частности модуль обработчика. Хотя это не то, чем я действительно хочу заниматься, сначала я пытаюсь выполнить эту задачу. Я пытаюсь получить socketfd, когда браузер (или клиент) подключается к nginx. И я получаю его успешно. Однако когда я пытался вывести что-то с помощью dup2(), nginx всегда находится в режиме ожидания и просто ничего не выводит. Иногда я могу получить вывод через долгое время, и как только я остановлю nginx, как остановка nginx -s, и вывод появится немедленно.

Например: достичь http://100.100.60.199/nc?search=123456 get search = 123456 HTTP / 1.l HOST

выход

Я читал некоторые блоги о модуле nginx и обнаружил, что модуль-обработчик имеет свой собственный шаблон (насколько я понимаю?). Например, вывод должен быть nginx_chain_t, и я должен создать эту цепочку вместо использования dup2, как обычный код c. Поэтому мне интересно, возможно ли получить вывод, как показано ниже.

Вот моя функция обработчика:

static ngx_int_t ngx_http_nc_handler(ngx_http_request_t *r){
    //ngx_int_t rc;
    ngx_socket_t connfd = r->connection->fd;
    int nZero=0;
    //if(setsockopt(connfd,SOL_SOCKET,SO_SNDBUF,(const void*)&nZero,sizeof(nZero))==0)
    if(setsockopt(connfd,IPPROTO_TCP,TCP_NODELAY,(const void*)&nZero,sizeof(int))==0){
        setbuf(stdout,NULL); 
        setbuf(stdin,NULL);
        setbuf(stderr,NULL);
        dup2(connfd,STDOUT_FILENO); 
        dup2(connfd,STDERR_FILENO);
        dup2(connfd,STDIN_FILENO);
        printf("%s\n", r->args.data);
        //close(connfd);
    }
    return NGX_OK;
}

Поэтому мне интересно, если это возможно, как я могу сделать все правильно, используя метод, описанный выше, или кто-то может просто сказать, что это невозможно, и построить цепочку - единственный путь?

1 ответ

Решение

Я наконец решил эту проблему, пытаясь понять, как именно работает nginx. Короче говоря, все, что мне нужно сделать, это добавить заголовок http в вывод. Но это не так просто, как я описал.

Другие вопросы по тегам