我用epoll_wait来监听端口事件,但是有的时候能够监听到对方的close(),有时候就检测不到,从而产生大量close_wait问题,咋破啊
epoll是否使用了Edge Trigger模式?在这种模式下,EPOLLIN事件只会产生一次,recv读到-1 且errno=EAGAIN为止,下一个EPOLLIN事件才会产生。在Edge Trigger模式下,EPOLLIN事件的正确逻辑应该是这样:while true { ret = recv(fd, buffer); if (ret \u0026lt; 0) { if (errno == EAGAIN) break; else close(fd); // Error occured } else if (ret \u0026gt; 0) { F(buffer);//Process data } else if (ret == 0) { close(fd); }}根据我的猜测,题主应该没有检查过ret \u0026lt; 0的情况。而在Level Trigger模式下应该不会有遗漏事件的问题。
■网友
errno=EAGAIN时再close,ET模式下,ret\u0026lt;0和==0都需要检测,个人觉得ET和LT在低负载短连接下差别不是很大,但高负载时ET性能还是更为优越写
■网友
使用水平触发 不要用边缘触发
推荐阅读
- 我用mediawiki建了一个站,条目才400条,新写入条目需要半分钟以上,太慢了。问题出哪。?
- 如果我用网线连到电脑上,会比通过路由器联网的效果更流畅吗
- 为啥我用百度的时候并没有遇到太多干扰
- 通信工程专业对电脑的配置要求高吗求推荐。
- 天猫的抢红包活动是怎样防止机器人的
- 我用excel做了一个同义句转化器,运行速度超慢,c语言能解决这个问题
- caffe训练出的模型预测时奇怪的问题
- QQ 音乐绿钻下载到的320k 和无损有很多假的
- 我用Google earth提取了我们市15万个点,做了我们市的DEM如图。左上角咋出现了这种情况
- QQ 的通讯密钥是怎样传输的
