From ccc2e6cfe3a5936b0c72fa57faca5fb7b46c0b1d Mon Sep 17 00:00:00 2001 From: Fritz Elfert Date: Sun, 4 Jul 1999 19:12:50 +0000 Subject: Forking, syslog and better error handling --- ncpd/packet.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'ncpd/packet.cc') diff --git a/ncpd/packet.cc b/ncpd/packet.cc index 70006bc..9009f86 100644 --- a/ncpd/packet.cc +++ b/ncpd/packet.cc @@ -29,6 +29,7 @@ #include #include #include +#include extern "C" { #include "mp_serial.h" @@ -155,6 +156,8 @@ bool packet:: get(unsigned char &type, bufferStore & ret) { while (!terminated()) { + if (linkFailed()) + return false; int res = read(fd, inPtr, BUFFERLEN - inLen); if (res > 0) { if (verbose & PKT_DEBUG_LOG) @@ -241,3 +244,25 @@ terminated() termLen = l; return false; } + +bool packet:: +linkFailed() +{ + int arg; + bool failed = false; + int res = ioctl(fd, TIOCMGET, &arg); + if (res < 0) + failed = true; + if (verbose & PKT_DEBUG_DUMP) + cout << "packet: DTR:" << ((arg & TIOCM_DTR)?1:0) + << " RTS:" << ((arg & TIOCM_RTS)?1:0) + << " DCD:" << ((arg & TIOCM_CAR)?1:0) + << " DSR:" << ((arg & TIOCM_DSR)?1:0) + << " CTS:" << ((arg & TIOCM_CTS)?1:0) << endl; + if (((arg & TIOCM_DSR) == 0) || ((arg & TIOCM_CTS) == 0)) + failed = true; + if ((verbose & PKT_DEBUG_LOG) && failed) + cout << "packet: linkFAILED\n"; + return failed; +} + -- cgit v1.2.3