2010-10-29 16 views
-1

Je viens de lire la section sur la fonction poll() dans la deuxième édition de "Advanced Unix Programming" de Marc Rochkind. Dans cette section, l'auteur mentionne que poll() n'est pas supporté par Darwin 6.6 et j'ai vu d'autres éléments sur Internet qui suggèrent que poll() est émulé sur OSX en utilisant l'appel système select(). Je veux utiliser poll() pour une classe sur laquelle je travaille spécifiquement car il peut servir un grand nombre de sockets et je suis préoccupé par le dépassement de la limite du nombre de handles de fichiers que select() peut utiliser. Si les instructions que j'ai lues sont vraies, existe-t-il une alternative appropriée à select() ou existe-t-il un moyen de surmonter la limitation FD_SETSIZE?Est-ce que OSX supporte le sondage()?

Répondre

2

poll (2) a été introduit en tant que couche sur select (2) dans 10.3, et a obtenu une implémentation native en 10.4.

La plupart des systèmes basés sur BSD ont implémenté poll() au cours des dernières années. Si vous obtenez des avantages réels de poll() (vs select()), je vous recommande de l'utiliser. Même sur les systèmes qui émulent encore poll() via select(), au pire, votre performance sera celle de select() avec une pénalité marginale.

Si vous êtes dans une situation où l'évolutivité de select() ne serait jamais acceptable, les systèmes dérivés de BSD ont tendance à avoir un kqueue(2) très ajusté.

+0

Selon http://marc.info/?l=log&m=111515776629581&w=2 il y avait un problème avec l'implémentation de poll() dans 10.4 qui a créé des problèmes pour quiconque souhaitant utiliser daemontools de DJB. Je ne sais pas si cela a été corrigé. – Peter