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; }
int skt_send_sync_recv(int fd, const void *sbuf, size_t slen, void *rbuf, size_t rlen, int timeout) { skt_send(fd, sbuf, slen); skt_set_noblk(fd, 0); skt_recv(fd, rbuf, rlen); return 0; }