// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
#include <string.h>
#include <errno.h>
#include <fcntl.h>
-#include "Utils/Exception.hh"
+#include "../Utils/Exception.hh"
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
+// senf::FileBody
+
+prefix_ void senf::FileBody::close()
+{
+ if (!valid())
+ throw SystemException(EBADF SENF_EXC_DEBUGINFO);
+ v_close();
+ fd_ = -1;
+}
+
+prefix_ void senf::FileBody::terminate()
+{
+ if (valid()) {
+ v_terminate();
+ fd_ = -1;
+ }
+}
+
+prefix_ void senf::FileBody::destroyClose()
+{
+ if (valid())
+ try {
+ close();
+ }
+ catch (...) {
+ terminate();
+ }
+}
+
prefix_ void senf::FileBody::v_close()
{
if (::close(fd_) != 0)
- throw SystemException(errno);
+ SENF_THROW_SYSTEM_EXCEPTION("");
}
prefix_ void senf::FileBody::v_terminate()
const
{
int flags = ::fcntl(fd(),F_GETFL);
- if (flags < 0) throw SystemException(errno);
+ if (flags < 0) SENF_THROW_SYSTEM_EXCEPTION("");
return ! (flags & O_NONBLOCK);
}
prefix_ void senf::FileBody::blocking(bool status)
{
int flags = ::fcntl(fd(),F_GETFL);
- if (flags < 0) throw SystemException(errno);
+ if (flags < 0) SENF_THROW_SYSTEM_EXCEPTION("");
if (status) flags &= ~O_NONBLOCK;
else flags |= O_NONBLOCK;
- if (::fcntl(fd(), F_SETFL, flags) < 0) throw SystemException(errno);
+ if (::fcntl(fd(), F_SETFL, flags) < 0) SENF_THROW_SYSTEM_EXCEPTION("");
}
/* We don't take POLLIN/POLLOUT as argument to avoid having to include
case EINTR:
break;
default:
- throw SystemException(errno);
+ SENF_THROW_SYSTEM_EXCEPTION("");
}
} while (rv<0);
return rv>0;
// c-file-style: "senf"
// indent-tabs-mode: nil
// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
// End: