我用socket()
+ POLLIN poll()
+ recv()
+ send()
编写了一个小型TCP服务器,但我不知道何时使用POLLOUT轮询或选择writefds
来轮询可写事件。
谁能给我一个POLLOUT真正用法的例子 ?
通常的模式是使用poll()
的非阻塞文件描述符,如下所示:
从nginx源码,我发现:
如果有一些数据要发送出来,nginx会尝试使用系统调用(也许是writev)发送它。 但是,如果nginx不能一次发送总数据,它将在pollfd上设置POLLOUT,如果使用poll事件,则等待可写事件。 获取可写事件时,nginx将发送左侧数据。
当nginx尝试响应大型静态文件时,很容易重现这种情况
使用带有gcc的c ++ 98,使用Raspberry PI 3,Debian。 。 。
在Acceptor / Connector模式和Reactor / Proactor / ACT模式的实现中,我按照以下顺序定期使用POLLOUT:
在大多数情况下,connect返回-1。 由于非阻塞文件描述符,这很可能。 然后我检查结果代码。
如果它是EINPROGRESS,我在反应堆(使用ppoll或epoll)和POLLOUT中注册一个事件处理程序。 最终完成连接后,poll将返回POLLOUT设置。
然后我创建一个新的TcpConnection类并进行通信。
需要了解更多c/c++开发分享何时使用poll C函数的POLLOUT事件?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享何时使用poll C函数的POLLOUT事件?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980240.html