Commit 0b8286f5 authored by Pavel Vainerman's avatar Pavel Vainerman

(ModbusTCPSession): добавил вылавливание исключения CommFailed (закрытие соединения)

parent faee9b3c
...@@ -289,15 +289,22 @@ size_t ModbusTCPSession::getNextData( unsigned char* buf, int len ) ...@@ -289,15 +289,22 @@ size_t ModbusTCPSession::getNextData( unsigned char* buf, int len )
{ {
ssize_t res = ModbusTCPCore::getDataFD( sock->getSocket(), qrecv, buf, len ); ssize_t res = ModbusTCPCore::getDataFD( sock->getSocket(), qrecv, buf, len );
if( res > 0 ) try
return res; {
if( res > 0 )
return res;
if( res < 0 )
{
if( errno != EAGAIN && dlog->is_warn() )
dlog->warn() << peername << "(getNextData): read from socket error(" << errno << "): " << strerror(errno) << endl;
if( res < 0 ) return 0;
}
}
catch( UniSetTypes::CommFailed )
{ {
if( errno != EAGAIN && dlog->is_warn() )
dlog->warn() << peername << "(getNextData): read from socket error(" << errno << "): " << strerror(errno) << endl;
return 0;
} }
if( !cancelled && dlog->is_info() ) if( !cancelled && dlog->is_info() )
...@@ -356,14 +363,21 @@ mbErrCode ModbusTCPSession::tcp_processing( ModbusRTU::ADUHeader& mhead ) ...@@ -356,14 +363,21 @@ mbErrCode ModbusTCPSession::tcp_processing( ModbusRTU::ADUHeader& mhead )
pt.setTiming(10); pt.setTiming(10);
do try
{
do
{
len = ModbusTCPCore::readDataFD( sock->getSocket(), qrecv, mhead.len );
if( len == 0 )
io.loop.iteration();
}
while( len == 0 && !pt.checkTime() );
}
catch( UniSetTypes::CommFailed )
{ {
len = ModbusTCPCore::readDataFD( sock->getSocket(), qrecv, mhead.len );
if( len == 0 )
io.loop.iteration();
} }
while( len == 0 && !pt.checkTime() );
if( len < mhead.len ) if( len < mhead.len )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment