+ goto err_out;
+ ct->task.pre_select = client_pre_select;
+ ct->task.post_select = client_post_select;
+ sprintf(ct->task.status, "client");
+ register_task(&ct->task);
+ return 1;
+err_out:
+ close(ct->rc4c.fd);
+ ct->rc4c.fd = -1;
+ return ret;
+}
+
+/**
+ * Open connection to para_server.
+ *
+ * \param argc Usual argument count.
+ * \param argv Usual argument vector.
+ * \param ct_ptr Points to dynamically allocated and initialized client task
+ * struct upon successful return.
+ * \param loglevel If not \p NULL, the number of the loglevel is stored here.
+ * \param parent Add the new buffer tree node as a child of this node.
+ * \param child Add the new buffer tree node as a parent of this node.
+ *
+ * Check the command line options given by \a argc and argv, set default values
+ * for user name and rsa key file, read further option from the config file.
+ * Finally, establish a connection to para_server.
+ *
+ * \return Standard.
+ */
+int client_open(int argc, char *argv[], struct client_task **ct_ptr,
+ int *loglevel, struct btr_node *parent, struct btr_node *child)
+{
+ char *home = para_homedir();
+ int ret;
+ struct client_task *ct = para_calloc(sizeof(struct client_task));
+
+ ct->btrn = btr_new_node(&(struct btr_node_description)
+ EMBRACE(.name = "client", .parent = parent, .child = child));
+ *ct_ptr = ct;
+ ct->rc4c.fd = -1;
+ ret = -E_CLIENT_SYNTAX;
+ if (client_cmdline_parser(argc, argv, &ct->conf))