示例#1
0
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
	}
}
示例#2
0
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;
	}
}
示例#3
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;
}
示例#4
0
文件: epoll.c 项目: Jvbzephir/libel
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);
  }
}
示例#5
0
文件: vfs_so.c 项目: zhangyinuo/otttt
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);
	}
}