void knet_channel_ref_leave(kchannel_ref_t* channel_ref) { verify(channel_ref); /* 递减引用计数 */ atomic_counter_dec(&channel_ref->ref_info->ref_count); /* 管道信息最终由kloop_t销毁 */ destroy(channel_ref); }
void connector_cb(kchannel_ref_t* channel, knet_channel_cb_event_e e) { char buffer[1024] = {0}; kstream_t* stream = 0; int bytes = 0; if (e & channel_cb_event_connect) { total_connected++; printf("connect finished: %d, %d\n", knet_channel_ref_get_socket_fd(channel), total_connected); } else if (e & channel_cb_event_recv) { stream = knet_channel_ref_get_stream(channel); bytes = knet_stream_available(stream); bytes = knet_stream_pop(stream, buffer, bytes); knet_stream_push(stream, buffer, bytes); } else if (e & channel_cb_event_close) { atomic_counter_dec(&client_count); if (client_count == 0) { printf("all client closed\n"); knet_loop_exit(knet_channel_ref_get_loop(channel)); } } else if (e & channel_cb_event_connect_timeout) { printf("connector close, connect timeout: %d\n", knet_channel_ref_get_socket_fd(channel)); knet_channel_ref_close(channel); } else if (e & channel_cb_event_timeout) { printf("connector recv timeout, close: %d\n", knet_channel_ref_get_socket_fd(channel)); knet_channel_ref_close(channel); } }
void knet_channel_ref_decref(kchannel_ref_t* channel_ref) { verify(channel_ref); atomic_counter_dec(&channel_ref->ref_info->ref_count); }