【发布时间】:2016-02-05 02:16:43
【问题描述】:
根据the POSIX poll docs,POLLOUT 标志表示“可以写入正常数据而不会阻塞。”。但是有多少数据?有没有固定的保证,或者有什么办法可以知道有多少缓冲空间?
我正在写管道和套接字。一般来说,我的程序不会得到EINTR,因为所有预期的信号都是通过signalfd/kqueue处理的;据我所知,这意味着我可以期待write 一直阻塞,直到所有请求的数据都传输完毕。
我不确定我是否想要这个。理想情况下,我只想写入与缓冲区空间一样多的数据,以便代码可以尽快返回轮询循环而不会阻塞。 (如果还有数据要写,我的代码可以在同一个 FD 上再次检查POLLOUT,并在空间可用时再次执行相同的操作。)
有什么办法可以让这个工作顺利进行吗? poll 似乎可以很好地从阻塞管道/套接字 FD 中读取:当设置 POLLIN 标志时,您读取到缓冲区,并且您可以在没有阻塞的情况下获得尽可能多的数据。但它开始看起来有点不方便写作!我错过了什么吗?
或者这一切只是想告诉我使用O_NONBLOCK?
我正在开发 OS X 和 Linux。
【问题讨论】:
-
它告诉你使用非阻塞模式。
标签: sockets pipe posix polling