38 lines
950 B
C
38 lines
950 B
C
#ifndef POOL_H
|
|
#define POOL_H
|
|
|
|
#include "conn.h"
|
|
#include "epoll.h"
|
|
|
|
// Connection pool
|
|
struct pool {
|
|
conn_t *conns; // array of connections
|
|
int max_conns; // pool size
|
|
conn_t *free_list; // available connections
|
|
runtime_t *rt; // epoll runtime
|
|
|
|
// Buffer configuration
|
|
size_t read_buf_size; // per-conn read buffer
|
|
size_t write_buf_size; // per-conn write buffer
|
|
size_t arena_size; // per-request arena size
|
|
|
|
// Callbacks
|
|
void (*on_request)(conn_t *c); // request complete
|
|
void (*on_close)(conn_t *c); // connection closed
|
|
};
|
|
|
|
// Pool management
|
|
pool_t* pool_new(runtime_t *rt, int max_conns);
|
|
void pool_free(pool_t *p);
|
|
conn_t* pool_get(pool_t *p);
|
|
void pool_put(pool_t *p, conn_t *c);
|
|
|
|
// Accessors
|
|
runtime_t* pool_runtime(pool_t *p);
|
|
|
|
// Internal handlers
|
|
void pool_handle_request(pool_t *p, conn_t *c);
|
|
void pool_handle_close(pool_t *p, conn_t *c);
|
|
|
|
#endif // POOL_H
|