我已经每2秒使用一个pthread轮询网络。 为此,我从pthread的run()方法调用一个客户端接口。 但是当服务器和客户端之间的网络关闭时发生了什么,这个方法应该会抛出异常,但是现在不会发生这种情况。所以我计划的是强制返回这个方法并退出线程。强制从线程调用的方法返回,如果线程本身退出
为了实现这一点,我试图通过信号强制退出线程。 但我仍然面临的问题是,从线程本身退出后,客户端接口很晚才抛出异常。这导致我的实现中的行为不一致。
我的代码看起来像这样
//server side code
//This is Linux code
void ServerImp::run()
{
try {
while(1)
{
Client->PingNetwork()
}
}
catch(...)
{
//Handle exception
}
}
//PingNetwork implementation
//This is Windows code
void NetworkImpl::PingNetwork() throw exception
{
try{
while(IsValidClient())//This will return as soon as client disconnected from server
{
sleep(2);
}
}
catch(...)
{
//Handle exception
}
}
基本思路问这个问题的是,对我来说我根本interace TAO 2.0A不会立即对当前会话检测网络故障,但是在客户端它检测到它很好并启动一个新的会话进行连接。但是,在某些时候,新旧会话都得到了CORBA :: COMM_FAILURE异常,因此导致服务器和客户端的行为不稳定。 这是TAO的限制吗?或者我必须做些事情才能使其发挥作用。 如果有什么方法可以在这里工作,请帮助我。
谢谢
不知道你的代码做什么或者你的问题是什么。 –
有一个尝试创建mcve的目的。另外,我的努力也证明了我的错误。试一试。 (Q计数仍为0,叹气。) –
也许你应该看看解决问题的原因,这听起来像是超时问题。可能有一个setsocketopt来减少超时,然后你可以正确处理异常。 – Richard