Exemple #1
0
static void glb_init()
{
//    fprintf (stderr, "GLB_OPTIONS='%s'\n", getenv ("GLB_OPTIONS"));
//    fprintf (stderr, "GLB_BIND='%s'\n",    getenv ("GLB_BIND"));
//    fprintf (stderr, "GLB_TARGETS='%s'\n", getenv ("GLB_TARGETS"));

    glb_cnf = glb_env_parse();

    if (glb_cnf)
    {
        if (glb_cnf->verbose) glb_cnf_print(stdout, glb_cnf);

        glb_log_init (GLB_LOG_STDERR, glb_cnf->verbose);

        glb_router = glb_router_create(glb_cnf);

        if (glb_router)
        {
            glb_wdog_t* wdog = NULL;

            if (glb_cnf->watchdog)
            {
                wdog = glb_wdog_create(glb_cnf, glb_router, NULL);
            }

            if (glb_cnf->ctrl_set)
            {
                uint16_t const default_port =
                    glb_sockaddr_get_port(&glb_cnf->inc_addr);

                int const sock = glb_socket_create(&glb_cnf->ctrl_addr, 0);

                if (sock > 0)
                    glb_ctrl_create(glb_cnf, glb_router, NULL, wdog,
                                    default_port, 0, sock);
            }
        }
    }

    if (!glb_router)
    {
        fputs (LIBGLB_PREFIX "Failed to initialize.\n", stderr);
        fflush (stderr);
    }

    glb_real_connect = dlsym(RTLD_NEXT, "__connect");
}
Exemple #2
0
// returns socket number or negative error code
int
glb_router_connect (glb_router_t* router, glb_sockaddr_t* dst_addr)
{
    int sock, ret;

    // prepare a socket
    sock = glb_socket_create (&router->sock_out);
    if (sock < 0) {
        glb_log_error ("glb_socket_create() failed");
        return sock;
    }

    // attmept to connect until we run out of destinations
    ret = router_connect_dst (router, sock, dst_addr);

    // avoid socket leak
    if (ret < 0) {
        glb_log_error ("router_connect_dst() failed");
        close (sock);
	sock = ret;
    }

    return sock;
}