void netflow_fini(void) { if (--inited) return; sock_fini(); log_category_netflow_fini(); }
static void __attribute__((destructor)) fi_fini(void) { psmx_fini(); // rdma_cm_fini(); // ucma_fini(); ibv_fini(); // uv_fini(); sock_fini(); }
int edpnet_sock_destroy(edpnet_sock_t sock){ edpnet_data_t *ed = &__edpnet_data; struct edpnet_sock *s = sock; if(!ed->ed_init){ log_warn("ednet not inited!\n"); return -1; } s->es_status = kEDPNET_SOCK_STATUS_ZERO; sock_fini(sock); close(s->es_sock); emit_destroy(s->es_emit); mheap_free(s); return 0; }
static void serv_worker_cb(uint32_t events, void *data){ struct edpnet_serv *s = (struct edpnet_serv *)data; struct edpnet_sock *sock; ASSERT(s != NULL); if(events & EPOLLIN){ sock = mheap_alloc(sizeof(*sock)); if(sock == NULL){ log_warn("no memory for sock!\n"); return ; } memset(sock, 0, sizeof(*sock)); sock->es_sock = accept(s->es_sock, NULL, NULL); if(sock->es_sock < 0){ log_warn("accept client fail!\n"); return ; } if(sock_init(sock) < 0){ sock_fini(sock); mheap_free(sock); }else{ s->es_cbs->connected(s, sock, s->es_data); } } if(events & EPOLLOUT){ ASSERT(0); } if(events & (EPOLLERR | EPOLLHUP)){ s->es_cbs->close(s, s->es_data); } }
static void __attribute__((destructor)) fi_fini(void) { psmx_fini(); ibv_fini(); sock_fini(); }