descriptor_ops.hpp
Go to the documentation of this file.
00001 //
00002 // descriptor_ops.hpp
00003 // ~~~~~~~~~~~~~~~~~~
00004 //
00005 // Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)
00006 //
00007 // Distributed under the Boost Software License, Version 1.0. (See accompanying
00008 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
00009 //
00010 
00011 #ifndef ASIO_DETAIL_DESCRIPTOR_OPS_HPP
00012 #define ASIO_DETAIL_DESCRIPTOR_OPS_HPP
00013 
00014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
00015 # pragma once
00016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
00017 
00018 #include "asio/detail/push_options.hpp"
00019 
00020 #include "asio/detail/push_options.hpp"
00021 #include <boost/config.hpp>
00022 #include <cerrno>
00023 #include "asio/detail/pop_options.hpp"
00024 
00025 #include "asio/error.hpp"
00026 #include "asio/detail/socket_types.hpp"
00027 
00028 #if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
00029 
00030 namespace asio {
00031 namespace detail {
00032 namespace descriptor_ops {
00033 
00034 inline void clear_error(asio::error_code& ec)
00035 {
00036   errno = 0;
00037   ec = asio::error_code();
00038 }
00039 
00040 template <typename ReturnType>
00041 inline ReturnType error_wrapper(ReturnType return_value,
00042     asio::error_code& ec)
00043 {
00044   ec = asio::error_code(errno,
00045       asio::error::get_system_category());
00046   return return_value;
00047 }
00048 
00049 inline int open(const char* path, int flags, asio::error_code& ec)
00050 {
00051   clear_error(ec);
00052   return error_wrapper(::open(path, flags), ec);
00053 }
00054 
00055 inline int close(int d, asio::error_code& ec)
00056 {
00057   clear_error(ec);
00058   return error_wrapper(::close(d), ec);
00059 }
00060 
00061 typedef iovec buf;
00062 
00063 inline void init_buf(buf& b, void* data, size_t size)
00064 {
00065   b.iov_base = data;
00066   b.iov_len = size;
00067 }
00068 
00069 inline void init_buf(buf& b, const void* data, size_t size)
00070 {
00071   b.iov_base = const_cast<void*>(data);
00072   b.iov_len = size;
00073 }
00074 
00075 inline int scatter_read(int d, buf* bufs, size_t count,
00076     asio::error_code& ec)
00077 {
00078   clear_error(ec);
00079   return error_wrapper(::readv(d, bufs, static_cast<int>(count)), ec);
00080 }
00081 
00082 inline int gather_write(int d, const buf* bufs, size_t count,
00083     asio::error_code& ec)
00084 {
00085   clear_error(ec);
00086   return error_wrapper(::writev(d, bufs, static_cast<int>(count)), ec);
00087 }
00088 
00089 inline int ioctl(int d, long cmd, ioctl_arg_type* arg,
00090     asio::error_code& ec)
00091 {
00092   clear_error(ec);
00093   return error_wrapper(::ioctl(d, cmd, arg), ec);
00094 }
00095 
00096 inline int fcntl(int d, long cmd, asio::error_code& ec)
00097 {
00098   clear_error(ec);
00099   return error_wrapper(::fcntl(d, cmd), ec);
00100 }
00101 
00102 inline int fcntl(int d, long cmd, long arg, asio::error_code& ec)
00103 {
00104   clear_error(ec);
00105   return error_wrapper(::fcntl(d, cmd, arg), ec);
00106 }
00107 
00108 inline int poll_read(int d, asio::error_code& ec)
00109 {
00110   clear_error(ec);
00111   pollfd fds;
00112   fds.fd = d;
00113   fds.events = POLLIN;
00114   fds.revents = 0;
00115   clear_error(ec);
00116   return error_wrapper(::poll(&fds, 1, -1), ec);
00117 }
00118 
00119 inline int poll_write(int d, asio::error_code& ec)
00120 {
00121   clear_error(ec);
00122   pollfd fds;
00123   fds.fd = d;
00124   fds.events = POLLOUT;
00125   fds.revents = 0;
00126   clear_error(ec);
00127   return error_wrapper(::poll(&fds, 1, -1), ec);
00128 }
00129 
00130 } // namespace descriptor_ops
00131 } // namespace detail
00132 } // namespace asio
00133 
00134 #endif // !defined(BOOST_WINDOWS) && !defined(__CYGWIN__)
00135 
00136 #include "asio/detail/pop_options.hpp"
00137 
00138 #endif // ASIO_DETAIL_DESCRIPTOR_OPS_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


Castor
Author(s): Carpe Noctem
autogenerated on Fri Nov 8 2013 11:05:39