一个关于socket长连接的问题
程序是用来和电信服务商进行长连接的,用的是电信的SMGP 3.0协议。
程序启动后,调用boost库的线程管理来启动一个线程函数SendData(string falg);
m_threadpool.schedule(boost::bind(&SMGPCT::SendData,this,"SMGPCTMT"));
在线程函数SendData(string falg)中,
做一个while(1)循环,里面先是调用ServerRecvTask()从中间件获取任务数据,
然后,若是没有数据,会进行30秒一次的链路测试ActiveTest(),问题就在这个链路测试中!
链路测试是先发送一个包给电信,然后等待电信的回执包,再由程序判断看回执包是否正确,
结果是如果隔的时间短的话,比如1-5秒之间,那么是收回的回执包是正确的,如果超过这个时间,比如之前设置的30秒,那么回执包怎么都不正确!
简单来说也就像下面这样:
SendData()
{
while (1)
{
sleep(5); //正确的回执包
//sleep(30);//错误的回执包
ActiveTest();
}
}