|
****** ace 下的 ACE_SOCK_Acceptor 拒绝服务,过一段时间后又提供服务,不知道什么原因????
这个是程序的一部分功能,我简化出来了,现在修改后能彻底编译通过
//服务器段
#include "ace/sock_acceptor.h"
int main(int argc,char *argv[])
{
ACE_SOCK_Acceptor acceptor_;
ACE_INET_Addr server_addr;
server_addr.set(9999,"");
acceptor_.open(server_addr,1);
for(;;)
{
ACE_INET_Addr logging_peer_addr;
ACE_SOCK_Stream logging_handler_;
if(acceptor_.accept(logging_handler_,&logging_peer_addr) == -1)
{
ACE_ERROR_RETURN((LM_ERROR,"%p\n","accept()"),1);
}
//ACE_SOCK_Acceptor 进行压力测试,看能顶住多少连接,我开一个客户端, 跑了 3 分钟都没有ACE_SOCK_Acceptor 就拒绝接受外面的连接了,把所有客户端停下,等 几分钟后,又可以提供服务了,也就是 accept 能成功了,很是郁闷,难道 ace 这么脆弱吗????
ACE_DEBUG((LM_DEBUG,"Accepted connection from %s\n",logging_peer_addr.get_host_name()));
logging_handler_.close();
}
}
//客户端
#include "ace/os.h"
#include "ace/sock_connector.h"
int main(int argc,char * argv[])
{
ACE_INET_Addr server_addr;
server_addr.set(9999,"localhost");
for(;;)
{
ACE_SOCK_Connector connector;
ACE_SOCK_Stream logging_peer_;
if(connector.connect(logging_peer_,server_addr) < 0 )
{
ACE_DEBUG((LM_ERROR,"connect %s fail\n",server_addr.get_host_name()),1);
ACE_OS::sleep(ACE_Time_Value(30,0));
continue;
}
logging_peer_.close();
}
}
使用
netstat -a 查看,9999 端口上由很多 time_OUT 的连接,不知道是不是 close 失败了..
原来问题如下:
[url=http://community.csdn.net/Expert/topic/4957/4957046.xml?temp=.5337641]http://community.csdn.net/Expert/topic/4957/4957046.xml?temp=.5337641[/url] |
|