diff options
Diffstat (limited to 'src/input/pvsPrivInputHandler.cpp')
-rw-r--r-- | src/input/pvsPrivInputHandler.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/input/pvsPrivInputHandler.cpp b/src/input/pvsPrivInputHandler.cpp index 70ed1bc..d33697a 100644 --- a/src/input/pvsPrivInputHandler.cpp +++ b/src/input/pvsPrivInputHandler.cpp @@ -21,7 +21,7 @@ #include <QtDebug> #include <QSocketNotifier> #include "inputEvent.h" -#include "inputEventHandler.h" +#include "inputHandlerChains.h" #include "pvsPrivInputSocket.h" #include "pvsPrivInputHandler.h" @@ -35,17 +35,17 @@ public: { } - pid_t getSenderPid() const + pid_t senderPid() const { return _pid; } - uid_t getSenderUid() const + uid_t senderUid() const { return _uid; } - gid_t getSenderGid() const + gid_t senderGid() const { return _gid; } @@ -63,6 +63,7 @@ PVSPrivInputHandler::PVSPrivInputHandler(int fd, QObject* parent) : _notifier = new QSocketNotifier(fd, QSocketNotifier::Read, this); _notifier->setEnabled(true); connect(_notifier, SIGNAL(activated(int)), this, SLOT(canRead())); + _handlerChain = makePrivilegedInputEventHandlerChain(); } PVSPrivInputHandler::~PVSPrivInputHandler() @@ -85,9 +86,24 @@ void PVSPrivInputHandler::canRead() if(!pvsPrivInputRecvMessage(_fd, _messageAssembly.data(), siz, pid, uid, gid, &err)) { - close(_fd); - deleteLater(); - return; + switch(err) + { + case EAGAIN: +#if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN) + case EWOULDBLOCK: +#endif + // That's okay. Nothing to do. + break; + case 0: + // We'll survive. There was no actual error, just the library routine + // that decided it did not really want to receive that packet. + break; + default: + qWarning("Something bad just happened, and cannot handle it. Panicking."); + close(_fd); + deleteLater(); + return; + } } else { |