### Acceptable protocol requirements

A type `X` meets the `AcceptableProtocol` requirements if it satisfies the requirements of `Protocol` as well as the additional requirements listed below.

Table 1. AcceptableProtocol requirements

expression | return type | assertion/note pre/post-conditions
--- | --- | ---
`X::socket` | A type that satisfies the requirements of `Destructible` (C++Std [destructible]) and `MoveConstructible` (C++Std [moveconstructible]), and that is publicly and unambiguously derived from `basic_socket<X>`. |