+static void client_cb(EV_P_ struct ev_io *w, int events)
+{
+ server_t *server = (server_t*)w;
+
+ debug("Entering client_cb for %p, %d (%d | %d)", w, events, EV_WRITE, EV_READ);
+
+ if (events & EV_WRITE && server->obuf.len) {
+ if (buffer_write(&server->obuf, server->fd) < 0) {
+ server_release(server);
+ return;
+ }
+ if (!server->obuf.len) {
+ ev_io_set(&server->io, server->fd, EV_READ);
+ }
+ }
+
+ if (events & EV_READ) {
+ if (server->run(server, config_ptr) < 0) {
+ server_release(server);
+ return;
+ }
+ }
+}
+
+static int start_client(server_t *server, start_client_t starter,
+ run_client_t runner, delete_client_t deleter)