+ /* Get args from connect instruction */
+ connect =
+ guac_protocol_expect_instruction(socket, GUAC_USEC_TIMEOUT, "connect");
+ if (connect == NULL) {
+
+ if (guac_client_plugin_close(plugin)) {
+ /* TODO: LOG ERROR */
+ }
+
+ guac_socket_close(socket);
+ free(data);
+ return NULL;
+ }
+
+ /* Load and init client */
+ client = guac_client_plugin_get_client(plugin, socket,
+ connect->argc, connect->argv);
+ guac_instruction_free(select);
+
+ if (client == NULL) {
+
+ if (guac_client_plugin_close(plugin)) {
+ /* TODO: LOG ERROR */
+ }
+
+ guac_socket_close(socket);
+ free(data);
+ return NULL;
+ }
+
+ /* Start client threads */
+ guac_start_client(client);
+
+ /* Clean up */
+ guac_client_free(client);
+ if (guac_client_plugin_close(plugin)) {
+ /* TODO: LOG ERROR */
+ }
+
+ /* Close socket */
+ guac_socket_close(socket);
+ close(thread_data->fd);
+