/*@ckcpuv*/ int conn_init(conn_t * thiz, kcpuv_conv_t conv, const struct sockaddr* addr, uv_udp_t* handle) { thiz->_conv = conv; thiz->_addr = *addr; thiz->_udp = handle; int r = -1; thiz->_kcp = ikcp_create(conv, (void*)thiz); CHK_COND(thiz->_kcp); thiz->_kcp->output = on_kcp_output; r = ikcp_nodelay(thiz->_kcp, 1, 10, 2, 1); PROC_ERR(r); return 0; Exit0: return -1; }
int Conn::init(kcpuv_conv_t conv, const sockaddr* addr, uv_udp_t* handle) { _conv = conv; _addr = *addr; _udp = handle; int r = -1; _kcp = ikcp_create(conv, (void*)this); CHK_COND(_kcp); _kcp->output = on_kcp_output; r = ikcp_nodelay(_kcp, 1, 10, 2, 1); PROC_ERR(r); return 0; Exit0: return -1; }
int Conn::send_udp(const char* buf, uint32_t len) { int r = -1; send_req_s* req = new send_req_s; CHK_COND(req); req->buf.base = new char[len]; req->buf.len = len; memcpy(req->buf.base, buf, len); r = uv_udp_send((uv_udp_send_t*)req, _udp, &req->buf, 1, &_addr, on_send_done); if (r < 0) { SAFE_DELETE_ARRAY(req->buf.base); SAFE_DELETE(req); return -1; } return 0; Exit0: return r; }
/*@ckcpuv*/ int conn_send_udp(conn_t * thiz, const char* buf, uint32_t len) { int r = -1; send_req_t * req = malloc(sizeof(send_req_t)); CHK_COND(req); req->buf.base = malloc(sizeof(char) * len); req->buf.len = len; memcpy(req->buf.base, buf, len); r = uv_udp_send((uv_udp_send_t*)req, thiz->_udp, &req->buf, 1, &thiz->_addr, on_send_done); if (r < 0) { free(req->buf.base); /* TODO: ensure free */ free(req); /* TODO: ensure free ? */ return -1; } return 0; Exit0: return r; }