diff options
Diffstat (limited to 'boost/asio/detail/impl/descriptor_ops.ipp')
-rw-r--r-- | boost/asio/detail/impl/descriptor_ops.ipp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/boost/asio/detail/impl/descriptor_ops.ipp b/boost/asio/detail/impl/descriptor_ops.ipp index 00f6b4796e..cdf5022306 100644 --- a/boost/asio/detail/impl/descriptor_ops.ipp +++ b/boost/asio/detail/impl/descriptor_ops.ipp @@ -439,6 +439,29 @@ int poll_write(int d, state_type state, boost::system::error_code& ec) return result; } +int poll_error(int d, state_type state, boost::system::error_code& ec) +{ + if (d == -1) + { + ec = boost::asio::error::bad_descriptor; + return -1; + } + + pollfd fds; + fds.fd = d; + fds.events = POLLPRI | POLLERR | POLLHUP; + fds.revents = 0; + int timeout = (state & user_set_non_blocking) ? 0 : -1; + errno = 0; + int result = error_wrapper(::poll(&fds, 1, timeout), ec); + if (result == 0) + ec = (state & user_set_non_blocking) + ? boost::asio::error::would_block : boost::system::error_code(); + else if (result > 0) + ec = boost::system::error_code(); + return result; +} + } // namespace descriptor_ops } // namespace detail } // namespace asio |