c – 关于linux上的poll实现与solaris上的poll实现

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,{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民意调查有什么区别?
提前获取所有答案.

解决方法

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

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

干杯!

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...