在solaris上调查linux上的实现和poll实现

时间:2012-05-16 13:14:05

标签: c linux solaris

在Linux环境中调试我们的应用程序时,我们可以观察到一些事件 - POLLHUP|POLLIN仅在linux上发生。我们的应用程序使用unix套接字。当我们这样做时:

ret = poll(xpoll->pfd, xpoll->pfd_count, xpoll_timeout);

strace显示:

poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=6, events=POLLIN|POLLPRI|POLLERR|POLLHUP}, {fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 3, 16) = 1 
([{fd=7, revents=POLLIN|POLLHUP}])

这种情况在solaris(相同的应用程序)中永远不会发生: 结果显示:

2463/3:                 fd=569 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
2463/3:                 fd=639 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
2463/3:                 fd=631 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=POLLIN
2463/3:                 fd=1160 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0
2463/3:                 fd=400 ev=POLLIN|POLLPRI|POLLERR|POLLHUP rev=0

请问您能解释一下solaris民意调查与liunx民意调查有何区别? 提前回答所有答案。

1 个答案:

答案 0 :(得分:3)

Linux和Solaris曾经无法在某些类型的文件(尤其是管道)上为EOF设置POLLIN。一个常见的解决方法是一起检查POLLHUP和POLLIN。 据我所知,Linux核心开发人员保持这种方式(可能是预期的),而Solaris研究员改变了这种行为,使用 POLLIN POLLEOF。

但是,这应该对您的应用程序没有问题:为了增加应用程序的可移植性,我们总是会检查位掩码中的两个标志。

干杯!