struct hostent *he;
struct sockaddr_in their_addr;
+ pcd->fd = -1;
ret = get_host_info(pcd->conf.hostname_arg, &he);
if (ret < 0)
- goto out;
+ goto err_out;
/* get new socket */
ret = get_socket();
if (ret < 0)
- goto out;
+ goto err_out;
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 out;
+ goto err_out;
pcd->status = CL_CONNECTED;
ret = mark_fd_nonblock(pcd->fd);
if (ret < 0)
- goto out;
+ 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);
- ret = 1;
-out:
+ return 1;
+err_out:
+ if (pcd->fd >= 0)
+ close(pcd->fd);
return ret;
}
PARA_NOTICE_LOG("connecting to %s:%d\n", conf->host_arg,
conf->port_arg);
ret = para_connect(phd->fd, &their_addr);
- if (ret < 0)
+ if (ret < 0) {
+ close(phd->fd);
goto err_out;
+ }
mark_fd_nonblock(phd->fd);
phd->status = HTTP_CONNECTED;
return 1;