La fonction poll() fonctionne de la manière suivante :
1. Regarde si l'état interrogé est atteint ou non.
Par exemple, est-ce qu'il est possible de lire des données dans le fichier ou le flux ? Est-ce qu'il est possible d'écrire dans le fichier ou d'envoyer des données un flux maintenant ou est-ce que ce n'est pas possible (car une autre application serait en train de faire une écriture) ? La permission de lire ou d'écrire peut être très récente ou très ancienne. Ce qui compte c'est que la permission soit valable à l'instant présent.
2. Si l'état interrogé n'est pas atteint, alors il y a une boucle jusqu'à ce que l'état soit atteint ou que le timeout soit dépassé. La manière dont se déroule cette partie peut dépendre des systèmes Unix, et des types de flux considérés (si c'est un fichier, si c'est un flux de données sur un réseau, etc.).
La fonction poll() ne réveille personne. Elle lit juste l'état en cours, et si l'état n'est pas encore celui qui est requis, alors elle attend que l'état change avant la fin du timeout. Il n'y a pas de surveillance de pile. La fonction poll() est basée sur la lecture des tables internes à Unix associées aux fichiers et aux flux. La fonction poll() fonctionne comme la fonction select() qui, elle-aussi, est passive.