linux - How do I use epoll? -


i know interest in file descriptor registered epoll_ctl, can not find info on how use epoll.

if want read , write files asynchronously, how do it? use normal read , write calls? call these functions before or after calling epoll_wait, , mark file descriptors used nonblock?

you're mixing concepts. epoll(7) not same thing asynchronous i/o. select(2), poll(2), epoll(7) , other similar functions can block whether or not underlying file descriptors blocking or non-blocking; provide synchronous form of notification - system doesn't tell until explicitly ask it.

the point of select(2), poll(2) , family can i/o multiplexing: single blocking call, can wait interesting events in given set of file descriptors. not same asynchronous i/o.

posix asynchronous i/o, on other hand, uses aio control blocks describe i/o operations (struct aiocb), , performed aio_read(3), aio_write(3), aio_return(3) , aio_suspend(3). unless have reason this, don't - complicates design quite lot.

to use epoll(7), there's not besides can read in man 7 epoll:

  • create epoll instance epoll_create(2) or more recent variant epoll_create1(2).
  • register interest in file descriptors epoll_ctl(2).
  • call epoll_wait(2) wait i/o event, possibly blocking calling thread until event available

once epoll_wait(2) returns, assuming successful, guaranteed @ least 1 of operations of interest registered epoll_ctl(2) not block. events not block returned epoll_wait(2) in buffer fed (the second argument epoll_wait(2)).

iterate through buffer , figure out want do. example, if registered interest in reading file descriptor , returned epoll_wait(2) (the events field entry includes epollin), can call read(2) knowing won't block. same goes true write(2), if registered interest in knowing when write(2) won't block, , event returned epoll_wait(2).

so, yes, call read(2) / write(2) after epoll_wait(2), make sure perform operation identified being available, don't block.

oh, , remember epoll(7) linux-specific.


Comments

Popular posts from this blog

c# - Better 64-bit byte array hash -

webrtc - Which ICE candidate am I using and why? -

php - Zend Framework / Skeleton-Application / Composer install issue -