Пример #1
0
HybridConnection*
hybrid_proxy_connect(const gchar *hostname, gint port, connect_callback func,
                     gpointer user_data)
{
    gint              sk;
    struct sockaddr   addr;
    HybridConnection *conn;

    g_return_val_if_fail(port != 0, NULL);
    g_return_val_if_fail(hostname != NULL, NULL);

    hybrid_debug_info("connect", "connecting to %s:%d", hostname, port);

    conn = g_new0(HybridConnection, 1);

    if ((sk = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

        hybrid_debug_error("connect", "create socket: %s", strerror(errno));
        hybrid_connection_destroy(conn);

        return NULL;
    }

    if (nonblock(sk) != HYBRID_OK) {

        hybrid_connection_destroy(conn);
        return NULL;
    }

    if (addr_init(hostname, port, &addr) != HYBRID_OK) {

        hybrid_connection_destroy(conn);
        return NULL;
    }

    if (connect(sk, &addr, sizeof(addr)) != 0) {

        if (errno != EINPROGRESS) {

            hybrid_debug_error("connect", "connect to \'%s:%d\':%s", hostname,
                               port, strerror(errno));
            hybrid_connection_destroy(conn);
            return NULL;
        }

        hybrid_debug_info("connect", "connect in progress");

        hybrid_event_add(sk, HYBRID_EVENT_WRITE, func, user_data);
    } else {
        /* connection establish imediately */
        func(sk, user_data);
    }

    conn->sk   = sk;
    conn->host = g_strdup(hostname);
    conn->port = port;

    return conn;
}
static __init int hi6xxx_pm_drvinit(void)
{
	if(dt_insmod_pm_asleep())return 0;

	addr_init();

	suspend_set_ops(&hi6xxx_pm_ops);

	return 0;
}
Пример #3
0
dnscache_t *
dnscache_create(char *server_addr,
                uint16_t port,
                uint32_t thread_num)
{
    dnscache_t *dnscache = malloc(sizeof(dnscache_t));
    if (!dnscache)
        return NULL;

    dnscache->thread_count_ = thread_num;
    dnscache->base_event_ = event_base_new();
    dnscache_init_sig(dnscache);

    dnscache->tp_ = thread_pool_create(thread_num);
    ASSERT(dnscache->tp_, "thread pool create failed");

    addr_t addr;
    addr_init(&addr, server_addr, port);
    dnscache->listen_socket = (socket_t *)malloc(sizeof(socket_t));
    int socket_type = addr_get_type(&addr) == ADDR_IPV4 ? AF_INET : AF_INET6;
    socket_open(dnscache->listen_socket, socket_type, SOCK_DGRAM, 0);
    socket_set_unblock(dnscache->listen_socket, true);
    socket_set_addr_reusable(dnscache->listen_socket);
    int ret = socket_bind(dnscache->listen_socket, &addr);
    ASSERT(ret == 0, "udp server bind failed\n");

    int threads_len = thread_num * sizeof(thread_local_param_t *);
    dnscache->thread_params_ = (thread_local_param_t **)malloc(threads_len);
    ASSERT(dnscache->thread_params_  != NULL, "udp server bind failed\n");
    int i = 0;

    for (; i < thread_num; ++i)
    {
        dnscache->thread_params_[i] =
            (thread_local_param_t *)malloc(sizeof(thread_local_param_t));
        thread_local_param_t *tlp = dnscache->thread_params_[i];
        tlp->thread_id_ = i;
        tlp->base_ = event_base_new();
        tlp->dns_server_ =
            dns_server_create(tlp->base_, UDP_SERVER, dnscache->listen_socket, queue_size);
        thread_pool_set_thread_data(dnscache->tp_, i, tlp);
    }

    return dnscache;
}
Пример #4
0
static void
reply_to_end_user(dns_client_error_code_t error_code,
                  const char *dns_raw_data,
                  uint16_t raw_data_len,
                  const addr_t *name_server_addr,
                  void *arg)
{
    query_session_t *session = (query_session_t *)arg;
    if (error_code != QUERY_NO_ERROR)
    {
        log_warning(QUERY_LOG, "has error during query backend named server\n");
        memorypool_free_node(session->zipper_->query_session_pool_, session);
        return;
    }
    socket_write_to(&session->client_socket_,
                    (uint8_t *)dns_raw_data,
                    raw_data_len,
                    &session->client_addr_);

   /* -----------------test for dns cache ---------------*/ 
    socket_t client_socket;
    socket_open(&client_socket, AF_INET, SOCK_DGRAM, 0);
    socket_set_unblock(&client_socket, true);
    addr_t server_addr;
    addr_init(&server_addr, dnscache_ip, dnscache_port);
    if (socket_connect(&client_socket, &server_addr) == 0)
    {
         socket_write(&client_socket,
                      (uint8_t *)dns_raw_data,
                      raw_data_len);
    }
    socket_close(&client_socket);
    /*---------------------------------------------------*/
    
    memorypool_free_node(session->zipper_->query_session_pool_, session);
}
Пример #5
0
int main(int argc, char **argv)
{
    int sd;
    socklen_t len;
    struct sockaddr_in addr;

    // Inizializzazione dell'indirizzo
    addr_init (&addr,SERV_PORT,INADDR_ANY);

    // Creazione del socket

    if ((sd=socket(AF_INET,SOCK_DGRAM,0))<0)
    {
        printf ("Impossibile creare un socket UDP\n");
        exit(3);
    }

    // Lego il socket appena creato all'indirizzo del server
    if (bind(sd, (struct sockaddr*) &addr, sizeof(addr))<0)  {
        printf ("Impossibile aprire una connessione sulla porta %d\n"
                "La porta potrebbe essere già in uso da un'altra applicazione\n",SERV_PORT);
        exit(2);
    }

    while(1)
    {
        MSG *m ;
        m = (MSG*) malloc(sizeof(MSG));
        len = sizeof(addr);

        if (recvfrom(sd, m,sizeof(MSG), 0 , (struct sockaddr *)&addr, &len ) < 0 )
        {
            perror("errore in recvfrom");
            exit(-1);
        }

        if( m->type == _M_TIME)
        {
            printf ("MESSAGGIO DEL CLIENT [ %s:%d, time = %d]  \n" , inet_ntoa(addr.sin_addr), ntohs(addr.sin_port) , m->time);
        }

        sleep(m->time);

        m->type = _M_ACK;
        m->time = -1 ;


        if (sendto(sd, m, sizeof(MSG), 0, (struct sockaddr *) &addr, sizeof(addr) ) < 0)
        {
            perror("errore in sendto");
            exit(-1);
        }
        else
        {
            printf ("INVIO ACK AL CLIENT\n\n\n\n");
        }

        delete_MSG(m);

    }
    close(sd);

    return(0);
}
Пример #6
0
/**
 * Initializes an IPv4 socket address for a NOAAPORT channel from a
 * specification of the address of the NOAAPORT multicast group.
 *
 * @param[in] nportSockAddr  The IPv4 socket address.
 * @param[in] nportSpec      The NOAAPORT IPv4 multicast address.
 * @retval    0              Success. `*nportSockAddr` is set.
 * @retval    1              Usage error. `log_add()` called.
 */
static int
initNportSockAddr(
        struct sockaddr_in* const restrict nportSockAddr,
        const char* const restrict         nportSpec)
{
    in_addr_t addr;
    int       status = addr_init(&addr, nportSpec);

    if (0 == status) {
        if (!mcastAddr_isValid(addr)) {
            log_add("Invalid multicast address: \"%s\"", nportSpec);
            status = 1;
        }
        else {
            unsigned channel = ntohl(addr) & 0xFF;
            if (channel == 0 || channel > sizeof(s_port)/sizeof(s_port[0])) {
                log_add("Invalid NBS channel: %u", channel);
                status = 1;
            }
            else {
                sockAddr_init(nportSockAddr, addr, s_port[channel-1]);
            }