diff --git a/main/tcptls.c b/main/tcptls.c index 6a26cb865ca2e329266362a39415cd30fcea64f6..45eb29bf6c442104d36e9847413912723f7918af 100644 --- a/main/tcptls.c +++ b/main/tcptls.c @@ -608,13 +608,8 @@ struct ast_tcptls_session_instance *ast_tcptls_client_start(struct ast_tcptls_se return handle_tcptls_connection(tcptls_session); client_start_error: - if (desc) { - close(desc->accept_fd); - desc->accept_fd = -1; - } ao2_ref(tcptls_session, -1); return NULL; - } struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_session_args *desc) @@ -631,10 +626,6 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s /* If we return early, there is no connection */ ast_sockaddr_setnull(&desc->old_address); - if (desc->accept_fd != -1) { - close(desc->accept_fd); - } - fd = desc->accept_fd = socket(ast_sockaddr_is_ipv6(&desc->remote_address) ? AF_INET6 : AF_INET, SOCK_STREAM, IPPROTO_TCP); if (desc->accept_fd < 0) { @@ -672,6 +663,9 @@ struct ast_tcptls_session_instance *ast_tcptls_client_create(struct ast_tcptls_s goto error; } + /* From here on out, the iostream owns the accept_fd and it will take + * care of closing it when the iostream is closed */ + tcptls_session->parent = desc; tcptls_session->parent->worker_fn = NULL; ast_sockaddr_copy(&tcptls_session->remote_address,