int doEcho (int efd, int cfd) { char buf[MAX_RECV_BUF]; char tmp[MAX_RECV_BUF]; int n; int slen, tlen; memset(buf, 0x00, sizeof(buf)); n = recv(cfd, buf, MAX_RECV_BUF, 0); if (n <= 0) { epoll_del(efd, cfd); close(cfd); printf("Close fd(%d)\n", cfd); } else { //printf("read data(fd:%d): %s(%d)\n", cfd, buf, n); strcpy(tmp, buf+12); printf("read data(fd:%d): %s(%d)\n", cfd, tmp, n); tlen=slen=0; //slen = send (cfd, buf+slen, n-slen, 0); #if 1 while (tlen != n) { slen = send (cfd, buf+slen, n-slen, 0); tlen+= slen; } #endif } }
void event_del(ohc_request_t *r) { if(r->events) { int epoll_fd = r->worker_thread ? r->worker_thread->epoll_fd : master_epoll_fd; epoll_del(epoll_fd, r->sock_fd); timer_del(&r->tnode); r->events = 0; } }
static int kill_mnl_process(void) { if (mnld_monitor.pid == C_INVALID_PID) { MND_MSG("no mnl process created, ignore\n"); return 0; } else { pid_t child_pid; int err, cnt = 0, max = 10; MNLD_DATA_T *obj = &mnld_data; MND_MSG("kill pid: %d\n", mnld_monitor.pid); kill(mnld_monitor.pid, SIGTERM); while (!mnld_monitor.terminated) { if (cnt++ < max) { /*timeout: 1 sec; notice that libmnlp needs some sleep time after MTK_PARAM_CMD_RESET_DSP*/ usleep(100000); continue; } else { kill(mnld_monitor.pid, SIGKILL); usleep(100000); } } MND_MSG("waiting counts: %d\n", cnt); child_pid = wait(&err); if (child_pid == -1) MND_MSG("wait error: %s\n",strerror(errno)); MND_MSG("child process : %d is killed\n", child_pid); if (WIFEXITED(err)) MND_MSG("Normal termination with exit status = %d\n", WEXITSTATUS(err)); if (WIFSIGNALED(err)) MND_MSG("Killed by signal %d%s\n", WTERMSIG(err), WCOREDUMP(err) ? "dump core" : ""); if (WIFSTOPPED(err)) MND_MSG("Stopped by signal = %d\n", WSTOPSIG(err)); mnld_monitor.pid = C_INVALID_PID; mnld_monitor.terminated = 0; epoll_del(obj->epoll_fd, obj->mnl_rcv_fd); /*mnl process is killed, remove the fd out of epoll_wait queue*/ close(obj->mnl_rcv_fd); close(obj->mnl_snd_fd); obj->mnl_rcv_fd = C_INVALID_FD; obj->mnl_snd_fd = C_INVALID_FD; mnl_set_pwrctl(GPS_PWRCTL_OFF); mnl_set_state(GPS_STATE_PWROFF); // Kill done, Update GPS_MNL_PROCESS_STATUS prop property_set(GPS_MNL_PROCESS_STATUS, "0000"); MND_MSG("libmnlp is killed. Set %s 0000\n", GPS_MNL_PROCESS_STATUS); assist_data_bit_map = FLAG_HOT_START; return 0; } return -1; }
void epoll_dispatch(el_loop *loop) { struct epoll_event events[EPOLL_FD_SIZE]; int ret = epoll_wait(loop->ioid, events, EPOLL_FD_SIZE, -1); int i; for (i = 0; i < ret; i++) { int sock = events[i].data.fd; //int data = strlen((char*)events[i].data.ptr); event *e = event_list_delete(loop->active_events, sock); epoll_del(loop, e); e->size = 1; event_list_put(loop->ready_events, e); } }
void do_close(int fd) { if (fd >= 0 && fd < maxfds) { struct conn *curcon = &acon[fd]; if (curcon->fd < 0) { LOG(glogfd, LOG_DEBUG, "fd %d already be closed %s\n", fd, FUNC); return; } LOG(glogfd, LOG_DEBUG, "%s:%s:%d close fd %d\n", ID, FUNC, LN, fd); struct conn *curconn = &(acon[fd]); if (solib.svc_finiconn) solib.svc_finiconn(fd); epoll_del(epfd, fd); curconn->fd = -1; close(fd); } }