从mongoose begin_request_handler回调调用函数

时间:2013-09-03 19:35:50

标签: c callback mongoose-web-server

目前我正在开发一个嵌入mongoose webserver的应用程序。在某些情况下,我必须在begin_request_handler内调用其他函数来创建所需的HTTP标头。在此期间,我意识到在完成请求处理程序之后,这些函数被称为 。例如:

void test() {
    printf("HELLO");
}   

static int begin_request_handler(struct mg_connection *conn) {
    test();
    const struct mg_request_info *request_info = mg_get_request_info(conn);
    ...
    return 1;
}

此处在浏览器关闭tcp连接后立即打印HELLO。有没有办法从回调内部调用函数?或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

  1. 如果要创建所需的HTTP标头。那么你上面提到的函数(begin_request_handler)可能不是正确的方法。查看结构mg_request_info中的结构mg_connection。这里设置了标题的名称和值。 我认为这些结构在连接建立之后就开始填充。另请查看pull()read()。这些是地面功能,其中设置了所有数据。

  2. 是的,有一种方法可以从回调中调用函数。你可以编写自己的回调函数,并使回调函数指向mg_context的结构,使其指向你的回调。 然后在handle_request()中你可以适当地调用它。您可以将其添加到mongoose.h中的struct mg_callbacks

  3. 示例:

      

    memset(& callbacks,0,sizeof(callbacks));
      callbacks.begin_request => begin_request_handler;

         

    //将您的函数放在begin_request_handler的位置   //启动Web服务器。

         

    ctx = mg_start(& callbacks,NULL,options);

    请指明您可能感兴趣的更多细节。

答案 1 :(得分:0)

好吧,明白了。我对stdout中的printf()缓冲区感到困惑。方法在正确的时间调用,但结果未显示。不管怎样,谢谢。