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 )
{
ssize_t res = ModbusTCPCore::getDataFD( sock->getSocket(), qrecv, buf, len );
if( res > 0 )
return res;
try
{
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() )
......@@ -356,14 +363,21 @@ mbErrCode ModbusTCPSession::tcp_processing( ModbusRTU::ADUHeader& mhead )
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 )
{
......
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