int tcp_connect_thread(thread_t * thread) { checker_t *checker = THREAD_ARG(thread); tcp_checker_t *tcp_check = CHECKER_ARG(checker); int fd; int status; /* * Register a new checker thread & return * if checker is disabled */ if (!CHECKER_ENABLED(checker)) { thread_add_timer(thread->master, tcp_connect_thread, checker, checker->vs->delay_loop); return 0; } if ((fd = socket(tcp_check->dst.ss_family, SOCK_STREAM, IPPROTO_TCP)) == -1) { DBG("TCP connect fail to create socket."); return 0; } status = tcp_bind_connect(fd, &tcp_check->dst, &tcp_check->bindto); if (status == connect_error) { thread_add_timer(thread->master, tcp_connect_thread, checker, checker->vs->delay_loop); } /* handle tcp connection status & register check worker thread */ tcp_connection_state(fd, status, thread, tcp_check_thread, tcp_check->connection_to); return 0; }
enum connect_result tcp_connect(int fd, struct sockaddr_storage *addr) { conn_opts_t co; memset(&co, 0, sizeof(co)); co.dst = *addr; return tcp_bind_connect(fd, &co); }
enum connect_result tcp_connect(int fd, uint32_t addr_ip, uint16_t addr_port) { return tcp_bind_connect(fd, addr_ip, addr_port, 0); }
enum connect_result tcp_connect(int fd, struct sockaddr_storage *addr) { return tcp_bind_connect(fd, addr, NULL); }