void reflective_copy(const Src& s, Dst& d) { holder sh(create_holder(const_cast< Src& >(s))); holder dh(create_holder(d)); reflective_copy(sh, dh); }
PyObject* init::do_call(PyObject* args_, PyObject* keywords) const { tuple args(ref(args_, ref::increment_count)); if (args[0]->ob_type->ob_type != extension_meta_class()) { PyErr_SetString(PyExc_TypeError, "argument 1 to __init__ must be an ExtensionInstance"); return 0; } extension_instance *self = static_cast<extension_instance*>(args[0].get()); tuple ctor_args = args.slice(1, args.size()); std::auto_ptr<instance_holder_base> result( create_holder(self, ctor_args.get(), keywords)); self->add_implementation(result); return none(); }
void server_start(unsigned short port, int * server_socket_fd, list_node * question_pool, list_node * results) { //region Initialize/declare variables struct sockaddr_in server = server_create_sin(port); int server_fd = server_create_socket(); *server_socket_fd = server_fd; server_listen(server_fd, &server); struct sockaddr_in client_addr; int client_socket_fd; socklen_t client_socket_len = sizeof(struct sockaddr_in); //endregion //region Listen and handle connections in new threads printf("Listening for connections on port %d...\n", port); while ((client_socket_fd = accept(server_fd, (struct sockaddr *) &client_addr, &client_socket_len))) { client_handler_data_holder * holder = create_holder(client_socket_fd, &client_addr, question_pool, results); //region Log connection { char ip_str[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &client_addr.sin_addr, ip_str, INET_ADDRSTRLEN); printf("Client (%s) connected\n", ip_str); } //endregion pthread_t thread; int res = pthread_create(&thread, NULL, handle_connection, holder); if (res < 0) { perror("Could not create client handler thread"); return; } pthread_detach(thread); } //endregion }