static void on_recv(void *ud, zn_Tcp *tcp, unsigned err, unsigned count) { zn_BufferPoolNode *data = (zn_BufferPoolNode*)ud; if (err != ZN_OK) { zn_deltcp(tcp); zn_putbuffer(&pool, data); return; } zn_recvfinish(&data->recv, count); zn_recv(tcp, zn_recvbuff(&data->recv), zn_recvsize(&data->recv), on_recv, ud); }
static void on_recv(void *ud, zn_Tcp *tcp, unsigned err, unsigned count) { zn_BufferPoolNode *node = (zn_BufferPoolNode*)ud; if (err != ZN_OK) { zn_putbuffer(&pool, node); zn_deltcp(tcp); return; } recv_count += count; zn_recvfinish(&node->recv, count); zn_recv(tcp, zn_recvbuff(&node->recv), zn_recvsize(&node->recv), on_recv, ud); }
static void on_client_recv(void *ud, zn_Tcp *tcp, unsigned err, unsigned count) { zn_BufferPoolNode *data = (zn_BufferPoolNode*)ud; if (err != ZN_OK) { ++recv_err; client_error(tcp, data); return; } ++recv_ok; recv_bytes += count; zn_recvfinish(&data->recv, count); zn_recv(tcp, zn_recvbuff(&data->recv), zn_recvsize(&data->recv), on_client_recv, ud); }