int vsf_ftpdataio_get_port_fd(struct vsf_session* p_sess) { int retval; int remote_fd; if (tunable_connect_from_port_20) { if (tunable_one_process_model) { remote_fd = vsf_one_process_get_priv_data_sock(p_sess); } else { remote_fd = vsf_two_process_get_priv_data_sock(p_sess); } } else { remote_fd = vsf_sysutil_get_ipsock(p_sess->p_port_sockaddr); if (vsf_sysutil_sockaddr_same_family(p_sess->p_port_sockaddr, p_sess->p_local_addr)) { static struct vsf_sysutil_sockaddr* s_p_addr; vsf_sysutil_sockaddr_clone(&s_p_addr, p_sess->p_local_addr); retval = vsf_sysutil_bind(remote_fd, s_p_addr); if (retval != 0) { die("vsf_sysutil_bind"); } } } retval = vsf_sysutil_connect_timeout(remote_fd, p_sess->p_port_sockaddr, tunable_connect_timeout); if (vsf_sysutil_retval_is_error(retval)) { vsf_cmdio_write(p_sess, FTP_BADSENDCONN, "Failed to establish connection."); vsf_sysutil_close(remote_fd); return -1; } init_data_sock_params(p_sess, remote_fd); return remote_fd; }
int vsf_ftpdataio_get_port_fd(struct vsf_session* p_sess) { int remote_fd; if (tunable_one_process_model || tunable_port_promiscuous) { remote_fd = vsf_one_process_get_priv_data_sock(p_sess); } else { remote_fd = vsf_two_process_get_priv_data_sock(p_sess); } if (vsf_sysutil_retval_is_error(remote_fd)) { vsf_cmdio_write(p_sess, FTP_BADSENDCONN, "Failed to establish connection."); return -1; } init_data_sock_params(p_sess, remote_fd); return remote_fd; }