sockets - 非阻塞套接字可以和epoll的电平触发模式一起使用吗?
问题描述
目前我有一个支持多个客户端会话的服务器应用程序。服务器以 epoll 的边缘触发模式运行。服务器内部使用的套接字本质上都是非阻塞的。主 epoll 循环看起来像这样,
n = epoll_wait()
iterate over n
if event is epollin(assume client has written some data)
while(1)
drain the buffer untill you get EAGAIN
break
当数据连续流过缓冲区并且缓冲区永远不会耗尽时,就会出现问题。其他会话没有机会被服务器招待。由于这可能对其他客户端造成饥饿,我正在考虑使用级别触发模式,该模式允许服务器以循环方式招待所有活动会话。我可以通过从订阅的事件中删除“EPOLLET”并读取一次缓冲区数据(例如,在 LT 模式下)来使用级别触发模式吗?任何意见/参考表示赞赏。谢谢 !
解决方案
推荐阅读
- r - R - 组之间的操作而不是组内的操作
- python - 标记根据表示点的数量改变大小的散点图
- regex - 空格的正则表达式仅在第一位?
- input - 从本地数据表读取的基本输入输出程序
- vue.js - 如何将对象添加到对象数组(Vue.js)
- java - 添加到 PATH 后,'javac' 不被识别为内部或外部命令、可运行程序或批处理文件
- python - 如何在 django 中自定义 403 错误页面?
- android - 创建一个卡片小部件,向上滑动时将展开到新屏幕
- shell - Curl HTTPS 返回空字符串,如何在 Linux shell / bash 脚本中设置 CURLOPT_SSL_VERIFYHOST
- mysql - MySQL 5.7:针对太多连接错误进行微调