|  | Home | Libraries | People | FAQ | More | 
Close a socket or socket-like object.
        Defined in header <boost/beast/core/stream_traits.hpp>
      
template< class Socket> void close_socket( Socket& sock);
        This function attempts to close an object representing a socket. In this
        context, a socket is an object for which an unqualified call to the function
        void beast_close_socket(Socket&) is well-defined. The function beast_close_socket is a customization
        point, allowing user-defined types to provide an algorithm for
        performing the close operation by overloading this function for the type
        in question. Since the customization point is a function call, the normal
        rules for finding the correct overload are applied including the rules for
        argument-dependent lookup ("ADL"). This permits classes derived
        from a type for which a customization is provided to inherit the customization
        point. An overload for the networking class template net::basic_socket
        is provided, which implements the close algorithm for all socket-like objects
        (hence the name of this customization point). When used in conjunction with
        get_lowest_layer,
        a generic algorithm operating on a layered stream can perform a closure of
        the underlying socket without knowing the exact list of concrete types.
      
The following generic function synchronously sends a message on the stream, then closes the socket.
template <class WriteStream> void hello_and_close (WriteStream& stream) { net::write(stream, net::const_buffer("Hello, world!", 13)); close_socket(get_lowest_layer(stream)); }
        To enable closure of user defined types, it is necessary to provide an overload
        of the function beast_close_socket
        for the type.
      
The following code declares a user-defined type which contains a private socket, and provides an overload of the customization point which closes the private socket.
class my_socket { net::ip::tcp::socket sock_; public: my_socket(net::io_context& ioc) : sock_(ioc) { } friend void beast_close_socket(my_socket& s) { error_code ec; s.sock_.close(ec); // ignore the error } };
| Name | Description | 
|---|---|
| 
                   | The socket to close. If the customization point is not defined for the type of this object, or one of its base classes, then a compiler error results. | 
        Convenience header <boost/beast/core.hpp>