epoll_ctl 作用

int epoll_ctl(int epoll_fd, int operation, int fd, struct epoll_event *event)
返回值爲0或者-1,代表成功或者失敗
第一個參數epoll_fd是epoll描述符
第二個參數代表需要進行的操作,可能的取值有:EPOLL_CTL_ADD 註冊、EPOLL_CTL_MOD 修改、EPOLL_CTL_DEL 刪除
第三個參數代表文件描述符
第四個參數代表進行操作的事件
在TKeed中,epoll_ctl封裝在tk_epoll_add函數中:

// 註冊新描述符
int tk_epoll_add(int epoll_fd, int fd, tk_http_request_t* request, int events) {
	struct epoll_event event;
	event.data.ptr = (void*)request;
	event.events = events;
	int ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &event);
	if (ret == -1)
		return -1;
}

容易混淆的是其中的event和events:
event是服務端根據http請求而定義的epoll_event結構體,event.data.ptr指向http請求結構體的地址,event.events的值用於初始化epoll模式,通常設置爲(EPOLLIN | EPOLLET)

tk_epoll_add(epoll_fd, listen_fd, request, (EPOLLIN | EPOLLET));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章