您的位置:首页 > 其它

一个关于POLL的BUG,百思不得其解

2017-09-29 08:39 429 查看

背景

系统:ubuntu 16.04 server 64bit

该问题出现在HTTP流媒体服务器中,流媒体服务器一直监听服务SOCKECT,当有新的连接时,则读取请求内容,并根据请求内容作出相应回复。

问题是当客户端FD为1087,客户端连接数到达1044时服务器会异常退出,百思不得其解。

出错打印

出错打印使用GDB调试,也不能追踪到具体行数,看起来信息也是很奇怪

*** stack smashing detected ***: /usr/local/bin/mscore terminated

Thread 6 "dohrserver" received signal SIGABRT, Aborted.
[Switching to Thread 0x7ffff1ac6700 (LWP 7772)]
0x00007ffff3c55428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54  ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.


出错地方

经过多次调试终于定位到问题出现在poll函数接口,但原理一直没想明白!!!

int ff_network_wait_fd_timeout(int fd, int write,int retrytime)
{
int ev = write ? POLLOUT : POLLIN;
struct pollfd p = { .fd = fd, .events = ev, .revents = 0 };
int ret=0;
do{
ret = poll(&p, 1, 100);/*100ms*/
if(ret!=0)
break;/*fd ready or errors*/
}while(retrytime-->0);

if(!(retrytime>0)){
ret=-1;
}
return ret ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: