严重问题:poll函数崩溃,跪求解答

只要开心就好 2012-10-08 06:59:51
本人写的udp程序中poll函数出现了异常问题,poll函数监控udp套接字端口,然后读取数据。poll函数出错程序终止。注意:poll函数直接出错退出程序,而不是返回值ret=-1的情况。
具体代码如下:
struct pollfd p = {s->udp_fd, POLLIN, 0};

for(;;)
{
__android_log_print(ANDROID_LOG_INFO, TAG, "before poll");
ret = poll(&p, 1, 100);
__android_log_print(ANDROID_LOG_INFO, TAG, "poll ret : %d",ret);//add by zhongcong for test
__android_log_print(ANDROID_LOG_INFO, TAG, "after poll");

if (ret < 0) {
__android_log_print(ANDROID_LOG_INFO, TAG, "after poll ret < 0");
if (ff_neterrno() == AVERROR(EINTR))
continue;
return AVERROR(EIO);
}
if (!(ret == 1 && p.revents & POLLIN))
continue;

__android_log_print(ANDROID_LOG_INFO, TAG, "before receive...");
len = recv(s->udp_fd, buf, size, 0);
__android_log_print(ANDROID_LOG_INFO, TAG, "after receive...");
if (len < 0) {
__android_log_print(ANDROID_LOG_INFO, TAG, "udp_read read len < 0");
if (ff_neterrno() != AVERROR(EAGAIN) &&
ff_neterrno() != AVERROR(EINTR))
return AVERROR(EIO);
} else {
__android_log_print(ANDROID_LOG_INFO, TAG, "udp_read read ok break!!! len=%d",len);
break;
}
}

程序刚开始运行到for循环时能够读取数据没有问题,过一段时间后在poll函数地方异常退出,打印信息最终显示为"before poll",这就说明程序执行到poll处出问题。按照poll的功能来说,poll可以检测到套接字的异常,所以不是套接字本身的问题,同时poll实现在内核中,无法跟踪调试代码,所以一直找不到解决办法,麻烦各位高手指教,感激不尽,高分相赠!
...全文
356 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
playStudy 2012-12-18
  • 打赏
  • 举报
回复
姐姐用得NDK吗?好厉害的样子啊!
只要开心就好 2012-10-09
  • 打赏
  • 举报
回复
肿么没人回复呢?求教啊!

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧