-int client_parse_config(int argc, char *argv[],
- struct private_client_data **pcd_ptr)
+static int client_connect(struct private_client_data *pcd)
+{
+ int ret;
+ struct hostent *he;
+ struct sockaddr_in their_addr;
+
+ pcd->fd = -1;
+ ret = get_host_info(pcd->conf.hostname_arg, &he);
+ if (ret < 0)
+ return ret;
+ /* get new socket */
+ ret = get_socket();
+ if (ret < 0)
+ return ret;
+ pcd->fd = ret;
+ /* init their_addr */
+ init_sockaddr(&their_addr, pcd->conf.server_port_arg, he);
+ ret = para_connect(pcd->fd, &their_addr);
+ if (ret < 0)
+ goto err_out;
+ pcd->status = CL_CONNECTED;
+ ret = mark_fd_nonblock(pcd->fd);
+ if (ret < 0)
+ goto err_out;
+ pcd->task.pre_select = client_pre_select;
+ pcd->task.post_select = client_post_select;
+ pcd->task.private_data = pcd;
+ sprintf(pcd->task.status, "client");
+ register_task(&pcd->task);
+ return 1;
+err_out:
+ close(pcd->fd);
+ pcd->fd = -1;
+ return ret;
+}
+
+int client_open(int argc, char *argv[], struct private_client_data **pcd_ptr)