static void remove_list(struct dict_list *list) { struct dict_list_elem *elem; struct dict_list_elem *tmp; LIST_FOREACH_SAFE(elem, list, next, tmp) { remove_list_elem(elem); }
static int read_client(int fd, rscntxt_t *cntxt) { if (NULL == cntxt) { return -1; } msgheader_t header; int nrecv = recv(fd, &header, sizeof(header), 0); if(nrecv < 0) { LogE("Failed recv msg header:%s", strerror(errno)); close(fd); return -1; } if (0 == nrecv) { struct sockaddr_in addr; int len = sizeof(addr); getpeername(fd, (struct sockaddr *)&addr, &len); Log("client %s disconnect\n", inet_ntoa(addr.sin_addr) ); if (epoll_ctl(cntxt->fd_epoll, EPOLL_CTL_DEL, fd, NULL) < 0) { LogE("Failed delete disconnected client fd"); } close(fd); connection_t conn; conn.conn_fd = fd; remove_list_elem(cntxt->conn_list, &conn, compare_conn); return 0; } if (validate_msgheader(&header) < 0) { LogE("Invalid msg header"); close(fd); return -1; } if (REQ_CONNECT == header.message_type && DEVICE_SLAVE == header.device_type) { if (proc_slave_connect(fd, cntxt) < 0) { LogE("Failed process slave device connect"); close(fd); return -1; } } else if (REQ_CONNECT == header.message_type && DEVICE_MASTER == header.device_type) { if (proc_master_connect(fd, ntohl(header.token), cntxt) < 0) { LogE("Failed process master device relay"); close(fd); return -1; } } else if (DEVICE_ADMIN == header.device_type) { proc_admin_connect(fd); } return 0; }
/* Remove and free corresponding to ELEM node in the INSN_LIST pointed to by LISTP. */ void remove_free_INSN_LIST_elem (rtx_insn *elem, rtx_insn_list **listp) { free_INSN_LIST_node (remove_list_elem (elem, (rtx *)listp)); }
/* Remove and free corresponding to ELEM node in the INSN_LIST pointed to by LISTP. */ void remove_free_INSN_LIST_elem (rtx elem, rtx *listp) { free_INSN_LIST_node (remove_list_elem (elem, listp)); }