====== تابع ()poll ======
این تابع مجموعه ای از file descriptor ها را بررسی میکند که آیا آماده نوشتن یا خواندن هستند یا نه
#include
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
ابتدا باید file descriptor های مورد نظر مان را در استراکچر از نوع pollfd پر کنیم
struct pollfd {
int fd; // the socket descriptor
short events; // bitmap of events we're interested in
short revents; // when poll() returns, bitmap of events that occurred
};
فیلدهای event و revent درواقع bitwise-OR از مقادیر زیر هستند
POLLIN : data is ready to recv() on this socket
POLLOUT : send()ing data to this socket is possible without blocking
در [[poll]] مقدار منفی برای timeout به معنی بینهایت است
مقدار بازگشتی [[poll]] تعداد file descriptor هایی است که event مورد نظر در آنها اتفاق افتاده، یعنی آماده خواندن یا نوشتن هستند.
باید در آرایه fds برای file descriptor های جدید (که معمولا ضمن فراخوانی [[accept]] ایجاد می شوند) جا باشد و گرنه باید با [[realloc]] به fds حافظه اضافه کنیم
برای پاک کردن file descriptor ها از آرایه fds می توان آخرین عضو آرایه را جای آن کپی کرد و یک عدد از طوا آرایه کم کرد. یا می توان به جای آن یک عدد منفی نوشت تا [[poll]] آن را نادیده بگیرد.