alex

Difference between select() and poll()

Whats the difference between select() and poll()?

  From Richard Stevens (rstevens@noao.edu):
The basic difference is that select()'s fd_set is a bit mask and
therefore has some fixed size.  It would be possible for the kernel to
not limit this size when the kernel is compiled, allowing the
application to define FD_SETSIZE to whatever it wants (as the comments
in the system header imply today) but it takes more work.  4.4BSD's
kernel and the Solaris library function both have this limit.  But I
see that BSD/OS 2.1 has now been coded to avoid this limit, so it's
doable, just a small matter of programming. :-)  Someone should file a
Solaris bug report on this, and see if it ever gets fixed.
With poll(), however, the user must allocate an array of pollfd
structures, and pass the number of entries in this array, so there's
no fundamental limit.  As Casper notes, fewer systems have poll() than
select, so the latter is more portable.  Also, with original
implementations (SVR3) you could not set the descriptor to -1 to tell
the kernel to ignore an entry in the pollfd structure, which made it
hard to remove entries from the array; SVR4 gets around this.
Personally, I always use select() and rarely poll(), because I port my
code to BSD environments too.  Someone could write an implementation
of poll() that uses select(), for these environments, but I've never
seen one. Both select() and poll() are being standardized by POSIX
1003.1g.

posted on 2008-11-21 14:59 alex 阅读(210) 评论(0)  编辑 收藏 引用 所属分类: Technique


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理