lnm/example/throughput.c

54 lines
1.3 KiB
C

#include "lnm/http/res.h"
#include "lnm/log.h"
#include "lnm/http/loop.h"
#include "lnm/loop.h"
lnm_err ctx_init(void **c_ctx, void *gctx) {
*c_ctx = NULL;
return lnm_err_ok;
}
void ctx_reset(void *c_ctx) {}
void ctx_free(void *c_ctx) {}
lnm_err data_streamer(uint64_t *written, char *buf,
lnm_http_conn *conn, uint64_t offset,
uint64_t len) {
// Don't do anything, just let the application return random data stored in
// the read buffer. The goal is to benchmark the networking pipeline
*written = len;
return lnm_err_ok;
}
lnm_http_step_err step_fn(lnm_http_conn *conn) {
lnm_http_loop_ctx *ctx = conn->ctx;
uint64_t len = 1 << 30;
lnm_http_res_body_set_fn(&ctx->res, data_streamer, len);
return lnm_http_step_err_done;
}
int main() {
lnm_http_loop *hl;
lnm_http_loop_init(&hl, NULL, ctx_init,
ctx_reset,
ctx_free);
lnm_http_router *router;
lnm_http_router_init(&router);
lnm_http_route *route;
lnm_http_router_add(&route, router, lnm_http_method_get, "/");
lnm_http_route_step_append(route, step_fn, false);
lnm_http_loop_router_set(hl, router);
lnm_log_init_global();
lnm_log_register_stdout(lnm_log_level_warning);
printf("res = %i\n", lnm_http_loop_run(hl, 8080, 1, 0));
}