8 Haziran 2021 Salı

epoll_ctl metodu

Giriş
epoll_ctl() metodunu anlamadan önce epoll_event yapısını anlamak gerekir.

epoll_create1() ile yaratılan socket set'ine yeni bir socket eklemek için kullanılır

Örnek - EPOLL_CTL_ADD
İzlenecek yeni fd  eklemek için şöyle yaparız. Bu fd'de bir olay olursa ev yapısı geri verilir.
epoll_event ev;
ev.data.fd = timerfd;

epoll_ctl(epollfd, EPOLL_CTL_ADD, timerfd, &ev); 
Örnek - EPOLL_CTL_ADD
Şöyle yaparız.Burada socketin EPOLLIN ve EPOLLRDHUP olayları dinleniyor
int servFd = socket (...);

int efd = epoll_create1 (EPOLL_CLOEXEC);
struct epoll_event epollEvt;
epollEvt.events = EPOLLIN | EPOLLRDHUP;
epollEvt.data.u32 = servFd;
epoll_ctl (efd, EPOLL_CTL_ADD, servFd, &epollEvt);
Örnek
Açıklaması şöyle
A detail to note: it’s important to set the level-trigger (EPOLLIN) but not the edge-trigger (EPOLLET) on the listening socket.
Şöyle yaparız. EPOLLIN olayı dinleniyor
void register_fd(int efd, int fd) {
  struct epoll_event event;
  event.data.fd = fd;
  event.events = EPOLLIN;
  epoll_ctl(efd, EPOLL_CTL_ADD, fd, &event);
  // Error check.
}

Hiç yorum yok:

Yorum Gönder