/*! \brief Release the connection's resources */ static void hc_delete(HttpConnection* connection) { //HttpServer* server = connection->server; log(INFO, "Http connection closed socket=%p", connection->sock); /* call the close callback if there is any */ if(connection->close_callback != NULL) { connection->close_callback(connection->close_data); } /* delete the socket */ sock_delete(connection->sock); /* erase the connection from the list of connections */ list_erase(connection->it); /* free header */ if(connection->header != NULL) { http_delete(connection->header); connection->header = NULL; } /* free memory */ HttpConnection_free(connection); }
static int port__ctl_del(port_state_t* port_state, SOCKET sock) { sock_state_t* sock_state = port_find_socket(port_state, sock); if (sock_state == NULL) return -1; sock_delete(port_state, sock_state); return 0; }
static int port__ctl_add(port_state_t* port_state, SOCKET sock, struct epoll_event* ev) { sock_state_t* sock_state = sock_new(port_state, sock); if (sock_state == NULL) return -1; if (sock_set_event(port_state, sock_state, ev) < 0) { sock_delete(port_state, sock_state); return -1; } port__update_events_if_polling(port_state); return 0; }
/*! \brief Close an http server */ void hs_delete(HttpServer* server) { /* close ann connections */ while(!list_empty(server->http_connections)) { hc_delete(list_front(server->http_connections)); } /* close the server socket */ sock_delete(server->sock); /* free the list */ list_delete(server->http_connections, NULL); /* free the serverstruct */ free(server); }