enhanced task trigger for httpd.

added cleanup logic for idle httpd clients
This commit is contained in:
2012-03-20 15:31:10 +00:00
parent c55bceb220
commit 7c224230f2
4 changed files with 305 additions and 188 deletions

View File

@ -220,8 +220,18 @@ enum qse_httpd_task_trigger_mask_t
QSE_HTTPD_TASK_TRIGGER_READABLE = (1 << 3),
QSE_HTTPD_TASK_TRIGGER_RELAYABLE = (1 << 4),
QSE_HTTPD_TASK_TRIGGER_WRITABLE = (1 << 5)
};
typedef struct qse_httpd_task_trigger_t qse_httpd_task_trigger_t;
struct qse_httpd_task_trigger_t
{
int mask; /* QSE_HTTPD_TASK_TRIGGER_READ | QSE_HTTPD_TASK_TRIGGER_WRITE */
qse_ubi_t handle;
};
#define QSE_HTTPD_TASK_TRIGGER_MAX 3
struct qse_httpd_task_t
{
/* == PUBLIC == */
@ -229,22 +239,11 @@ struct qse_httpd_task_t
/* you must not call another entask functions from within
* an initailizer. you can call entask functions from within
* a finalizer and a main function. */
qse_httpd_task_init_t init;
qse_httpd_task_fini_t fini;
qse_httpd_task_main_t main;
int trigger_mask;
qse_ubi_t trigger[3];
#if 0
struct
{
int mask; /* QSE_HTTPD_TASK_TRIGGER_READ | QSE_HTTPD_TASK_TRIGGER_WRITE */
qse_ubi_t handle;
} trigger[3];
#endif
void* ctx;
qse_httpd_task_init_t init;
qse_httpd_task_fini_t fini;
qse_httpd_task_main_t main;
qse_httpd_task_trigger_t trigger[QSE_HTTPD_TASK_TRIGGER_MAX];
void* ctx;
/* == PRIVATE == */
qse_httpd_task_t* prev;
@ -256,23 +255,25 @@ struct qse_httpd_client_t
{
/* == PUBLIC == */
qse_ubi_t handle;
qse_ubi_t handle2;
qse_nwad_t local_addr;
qse_nwad_t remote_addr;
qse_ubi_t handle;
qse_ubi_t handle2;
qse_nwad_t local_addr;
qse_nwad_t remote_addr;
/* == PRIVATE == */
qse_htrd_t* htrd;
int secure;
int status;
qse_htrd_t* htrd;
int secure;
int status;
qse_httpd_task_trigger_t trigger[QSE_HTTPD_TASK_TRIGGER_MAX];
qse_ntime_t last_active;
qse_httpd_client_t* prev;
qse_httpd_client_t* next;
qse_httpd_client_t* prev;
qse_httpd_client_t* next;
qse_httpd_client_t* bad_next;
qse_httpd_client_t* bad_next;
qse_httpd_client_t* prev_tasked;
qse_httpd_client_t* next_tasked;
qse_httpd_client_t* prev_tasked;
qse_httpd_client_t* next_tasked;
struct
{