prefix_ void senf::FileBody::close()
{
if (!valid())
- throw SystemException(EBADF);
+ throw SystemException(EBADF SENF_EXC_DEBUGINFO);
v_close();
fd_ = -1;
}
prefix_ void senf::FileBody::v_close()
{
if (::close(fd_) != 0)
- throw SystemException();
+ SENF_THROW_SYSTEM_EXCEPTION("");
}
prefix_ void senf::FileBody::v_terminate()
const
{
int flags = ::fcntl(fd(),F_GETFL);
- if (flags < 0) throw SystemException();
+ 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();
+ 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();
+ if (::fcntl(fd(), F_SETFL, flags) < 0) SENF_THROW_SYSTEM_EXCEPTION("");
}
/* We don't take POLLIN/POLLOUT as argument to avoid having to include
sys/poll.h in the .cci file (and therefore indirectly into the .hh
and then every file which uses FileHandle) */
-prefix_ bool senf::FileBody::pollCheck(int fd, bool incoming, bool block)
+prefix_ bool senf::FileBody::pollCheck(int fd, bool incoming, int timeout, bool oob)
const
{
struct ::pollfd pfd;
::memset(&pfd,0,sizeof(pfd));
pfd.fd = fd;
- pfd.events = incoming?POLLIN:POLLOUT;
+ pfd.events = incoming?(oob?POLLPRI:POLLIN):POLLOUT;
int rv = -1;
do {
- rv = ::poll(&pfd,1,block?-1:0);
+ rv = ::poll(&pfd,1,timeout);
if (rv<0)
switch (errno) {
case EINTR:
break;
default:
- throw SystemException();
+ SENF_THROW_SYSTEM_EXCEPTION("");
}
} while (rv<0);
return rv>0;
}
+prefix_ senf::FileBody::~FileBody()
+{}
+
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_