|
楼主 |
发表于 2010-1-18 11:59:14
|
显示全部楼层
我已经找到原因,问题不在链接。
首先和linux下的IO设置有关,要设置一下 ulimit -n 看看当前允许的链接上线并予以设置。
经过反复测试发现,Devpoll在1007个链接以后,recv的时候会有一些延迟,问题就出现在这里。
我的代码如下:
ACE_Time_Value nowait(ACE_Time_Value::zero);
int nDataLen = this->peer().recv(m_RecvPacket.WritePtr(), nCurrRecvSize, MSG_NOSIGNAL, &nowait);
改成
ACE_Time_Value nowait(5);
int nDataLen = this->peer().recv(m_RecvPacket.WritePtr(), nCurrRecvSize, MSG_NOSIGNAL, &nowait);
问题就解决了。
究其本质,跟踪了ACE的源码,ACE_Time_Value::zero和0是不一样的。ACE_Time_Value::zero代表不等待。0代表无限等待。这两个是有本质区别的。<ACE陷阱>里面有关于这个问题的描述。 |
|