コード例 #1
0
ファイル: rpcd.c プロジェクト: gozfree/src
int rpcd_init(uint16_t port)
{
    int fd;
    fd = skt_tcp_bind_listen(NULL, port, 0);
    if (fd == -1) {
        return -1;
    }
    logi("rpcd listen port = %d\n", port);
    _rpcd = CALLOC(1, struct rpcd);
    _rpcd->listen_fd = fd;
    _rpcd->evbase = gevent_base_create();
    if (!_rpcd->evbase) {
        return -1;
    }
    struct gevent *e = gevent_create(fd, on_connect, NULL, on_error, (void *)_rpcd);
    if (-1 == gevent_add(_rpcd->evbase, e)) {
        loge("event_add failed!\n");
        gevent_destroy(e);
    }
    _rpcd->dict_fd2rpc = dict_new();
    _rpcd->dict_uuid2fd = dict_new();
    wq_pool_init();
    //REGISTER_MSG_MAP(BASIC_RPC_API);
    rpcd_group_register();
    return 0;
}
コード例 #2
0
ファイル: librpc.c プロジェクト: ifzz/libraries
struct rpc *rpc_create(const char *host, uint16_t port)
{
    int ret;
    char str_ip[INET_ADDRSTRLEN];
    struct skt_connection *sc;
    struct rpc *r = CALLOC(1, struct rpc);
    if (!r) {
        loge("malloc failed!\n");
        return NULL;
    }
    sc = skt_tcp_connect(host, port);
    if (sc == NULL) {
        loge("connect failed!\n");
        return NULL;
    }
    r->fd = sc->fd;

    if (-1 == skt_set_noblk(sc->fd, 0)) {
        loge("block skt_recv failed!\n");
    }
    ret = rpc_recv(r, r->packet.header.uuid_src, MAX_UUID_LEN);
    if (ret != MAX_UUID_LEN) {
        loge("rpc_recv failed: ret = %d\n", ret);
    }
//    if (-1 == skt_set_noblk(sc->fd, 1)) {
//        loge("no-block skt_recv failed!\n");
//    }
    skt_addr_ntop(str_ip, sc->local.ip);
    logi("local addr = %s:%d, uuid_src = %s\n", str_ip, sc->local.port, r->packet.header.uuid_src);
    skt_addr_ntop(str_ip, sc->remote.ip);
    //logd("remote ip = %s, port = %d\n", str_ip, sc->remote.port);
    r->evbase = gevent_base_create();

    return r;
}
コード例 #3
0
ファイル: librpc.c プロジェクト: xia0Hong/libraries
struct rpc *rpc_create(const char *host, uint16_t port)
{
    char local_ip[INET_ADDRSTRLEN];
    char remote_ip[INET_ADDRSTRLEN];
    struct rpc *r = CALLOC(1, struct rpc);
    if (!r) {
        loge("malloc failed!\n");
        return NULL;
    }
    memset(&r->recv_pkt, 0, sizeof(struct rpc_packet));
    struct skt_connection *connect;
    connect = skt_tcp_connect(host, port);
    if (!connect) {
        loge("connect failed!\n");
        return NULL;
    }
    r->fd = connect->fd;
    if (-1 == skt_set_block(r->fd)) {
        loge("skt_set_block failed!\n");
    }

    r->evbase = gevent_base_create();
    if (!r->evbase) {
        loge("gevent_base_create failed!\n");
        return NULL;
    }
    rpc_set_cb(r, on_read, on_write, on_error, r);
    r->dispatch_thread = thread_create("rpc_dispatch", rpc_dispatch_thread, r);

    r->state = rpc_inited;
    if (thread_sem_wait(r->dispatch_thread, 2000) == -1) {
        loge("wait response failed %d:%s\n", errno, strerror(errno));
        return NULL;
    }
    skt_addr_ntop(local_ip, connect->local.ip);
    skt_addr_ntop(remote_ip, connect->remote.ip);
    logi("rpc[%08x] connect information:\n", r->send_pkt.header.uuid_src);
    logi("local addr = %s:%d\n", local_ip, connect->local.port);
    logi("remote addr = %s:%d\n", remote_ip, connect->remote.port);

    return r;
}