解决在epoll中accept接收端口会漏处理的问题. 直到新的socket消息到达,epoll_wait才响应去接收socket端口数据的问题

本文探讨了在使用epoll时遇到的accept接收端口处理遗漏问题,即在没有新socket消息到达时,epoll_wait不会响应接收端口数据。针对此问题,文章分析原因并提供了解决方案。
摘要由CSDN通过智能技术生成
在用epoll的边缘触发模式中,发现socket接收有异常,有时会出现新的socket连接到底,但是需要有新的数据到底时,epoll_wait才响应去接收数据这个问题。

原因分析:
epoll的边缘触发模式下,同一端口可读时,epoll_wait只会提示一次。在accept中,当2个端口同时到达时,只会响应一次。这时就要用 while等循环函数去接收消息和接收accept响应,一般接收消息大家都会做,接收accept响应会忘。

代码修改:

老代码:

    INT32 conn_fd = accept( listen_fd, (sockaddr *)&clientaddr, &clilen );//accept4( event_fd, (sockaddr *)&clientaddr, &clilen, SOCK_NONBLOCK )
    if( conn_fd < 0 ) {
        MS_LOGER_FATAL("%s%s%s%s", LOG_CMD_FLAG , LOG_VOD_FLAG , "accept error" , strerror( errno ));
    } else {
        MS_LOGER_DEBUG("%s%s%s%d", LOG_CMD_FLAG , LOG_VOD_FLAG , "conn fd" , conn_fd);
    }


新代码:

                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值