Beispiel #1
0
 asio::error_code set_option(implementation_type& impl,
     const Option& option, asio::error_code& ec)
 {
   return do_set_option(impl, option.level(impl.protocol_),
       option.name(impl.protocol_), option.data(impl.protocol_),
       option.size(impl.protocol_), ec);
 }
 asio::error_code set_option(implementation_type& impl,
     const Option& option, asio::error_code& ec)
 {
   socket_ops::setsockopt(impl.socket_, impl.state_,
       option.level(impl.protocol_), option.name(impl.protocol_),
       option.data(impl.protocol_), option.size(impl.protocol_), ec);
   return ec;
 }
 asio::error_code get_option(const implementation_type& impl,
     Option& option, asio::error_code& ec) const
 {
   std::size_t size = option.size(impl.protocol_);
   socket_ops::getsockopt(impl.socket_, impl.state_,
       option.level(impl.protocol_), option.name(impl.protocol_),
       option.data(impl.protocol_), &size, ec);
   if (!ec)
     option.resize(impl.protocol_, size);
   return ec;
 }
 std::error_code get_option(const implementation_type& impl,
     Option& option, std::error_code& ec) const
 {
   std::size_t size = option.size(impl.protocol_);
   do_get_option(impl, option.level(impl.protocol_),
       option.name(impl.protocol_),
       option.data(impl.protocol_), &size, ec);
   if (!ec)
     option.resize(impl.protocol_, size);
   return ec;
 }
  void Socket::setsockopt(const Option& option) throw (Exception)
  {
    int error;

    if(!isOpened())
    {
      throw Exception(SETSOCKOPT, NOT_OPENED, NOT_OPENED_CODE);
    }

    error = ::setsockopt(descriptor, option.level(), option.id(), option.pointer(), option.size());

    if(error == SETSOCKOPT_ERROR)
    {
      throw LibCException(SETSOCKOPT);
    }
  }
  int Socket::getsockopt(Option& option) throw (Exception)
  {
    int error;

    if(!isOpened())
    {
      throw Exception(GETSOCKOPT, NOT_OPENED, NOT_OPENED_CODE);
    }

    socklen_t optSize = option.size();

    error = ::getsockopt(descriptor, option.level(), option.id(), option.pointer(), &optSize);

    if(error == GETSOCKOPT_ERROR)
    {
      throw LibCException(GETSOCKOPT);
    }

    return optSize;
  }