[/
 / Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:GettableSocketOption Gettable socket option requirements]

A type `X` meets the `GettableSocketOption` requirements if it satisfies the
requirements listed below.

In the table below, `a` denotes a (possibly const) value of type `X`, `b`
denotes a value of type `X`, `p` denotes a (possibly const) value that meets
the [link asio.reference.Protocol `Protocol`] requirements, and `s` denotes a
(possibly const) value of a type that is convertible to `size_t` and denotes a
size in bytes.

[table GettableSocketOption requirements for extensible implementations
  [[expression] [type] [assertion/note\npre/post-conditions]]
  [
    [`a.level(p)`]
    [`int`]
    [
      Returns a value suitable for passing as the /level/ argument to __POSIX__
      __getsockopt__ (or equivalent).
    ]
  ]
  [
    [`a.name(p)`]
    [`int`]
    [
      Returns a value suitable for passing as the /option_name/ argument to
      __POSIX__ __getsockopt__ (or equivalent).
    ]
  ]
  [
    [`b.data(p)`]
    [`void*`]
    [
      Returns a pointer suitable for passing as the /option_value/ argument to
      __POSIX__ __getsockopt__ (or equivalent).
    ]
  ]
  [
    [`a.size(p)`]
    [`size_t`]
    [
      Returns a value suitable for passing as the /option_len/ argument to
      __POSIX__ __getsockopt__ (or equivalent), after appropriate
      integer conversion has been performed.
    ]
  ]
  [
    [`b.resize(p,s)`]
    []
    [
      post: `b.size(p) == s`.\n
      Passed the value contained in the /option_len/ argument to __POSIX__
      __getsockopt__ (or equivalent) after successful completion of the
      function. Permitted to throw an exception if the socket option object `b`
      does not support the specified size.
    ]
  ]
]

[endsect]
