目前我正在开发一个嵌入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。有没有办法从回调内部调用函数?或者我错过了什么?
答案 0 :(得分:0)
如果要创建所需的HTTP标头。那么你上面提到的函数(begin_request_handler)
可能不是正确的方法。查看结构mg_request_info
中的结构mg_connection
。这里设置了标题的名称和值。
我认为这些结构在连接建立之后就开始填充。另请查看pull()
和read()
。这些是地面功能,其中设置了所有数据。
是的,有一种方法可以从回调中调用函数。你可以编写自己的回调函数,并使回调函数指向mg_context
的结构,使其指向你的回调。
然后在handle_request()
中你可以适当地调用它。您可以将其添加到mongoose.h中的struct mg_callbacks
示例:
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()缓冲区感到困惑。方法在正确的时间调用,但结果未显示。不管怎样,谢谢。