+ 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->fd);
+ ct->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.
+ *
+ * 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)
+{
+ char *home = para_homedir();
+ struct stat statbuf;
+ int ret;
+ struct client_task *ct = para_calloc(sizeof(struct client_task));
+
+ *ct_ptr = ct;
+ ct->fd = -1;
+ ret = client_cmdline_parser(argc, argv, &ct->conf);
+ HANDLE_VERSION_FLAG("client", ct->conf);
+ ret = -E_CLIENT_SYNTAX;
+ if (!ct->conf.inputs_num)