严重问题:poll函数崩溃,跪求解答
本人写的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实现在内核中,无法跟踪调试代码,所以一直找不到解决办法,麻烦各位高手指教,感激不尽,高分相赠!