[/
 / Copyright (c) 2003-2010 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:SettableSocketOption Settable socket option requirements]

In the table below, `X` denotes a socket option class, `a` denotes a value of
`X`, `p` denotes a value that meets the [link boost_asio.reference.Protocol
protocol] requirements, and `u` denotes an identifier.

[table SettableSocketOption requirements
  [[expression] [type] [assertion/note\npre/post-conditions]]
  [
    [`a.level(p);`]
    [`int`]
    [
      Returns a value suitable for passing as the /level/ argument to __POSIX__
      __setsockopt__ (or equivalent).
    ]
  ]
  [
    [`a.name(p);`]
    [`int`]
    [
      Returns a value suitable for passing as the /option_name/ argument to
      __POSIX__ __setsockopt__ (or equivalent).
    ]
  ]
  [
    [`const X& u = a;
      u.data(p);`]
    [a pointer, convertible to `const void*`]
    [
      Returns a pointer suitable for passing as the /option_value/ argument to
      __POSIX__ __setsockopt__ (or equivalent).
    ]
  ]
  [
    [`a.size(p);`]
    [`size_t`]
    [
      Returns a value suitable for passing as the /option_len/ argument to
      __POSIX__ __setsockopt__ (or equivalent), after appropriate integer
      conversion has been performed.
    ]
  ]
]

[endsect]
