Accept connections
Para que o servidor aceite a conexão dos clientes. O servidor precisará criar um acceptor
:
......
boost::asio::io_context io_context;
boost::asio::ip::tcp::acceptor acceptor{
io_context,
boost::asio::ip::tcp::endpoint{boost::asio::ip::tcp::v6(), 3303}};
......
boost::asio::ip::tcp::acceptor
é uma instância de basic_socket_acceptor
:
class tcp
{
......
/// The TCP acceptor type.
typedef basic_socket_acceptor<tcp> acceptor;
......
}
O construtor basic_socket_acceptor
combinará criação de socket, configuração de endereço de reutilização, funções binding & listening:
basic_socket_acceptor(boost::asio::io_context& io_context,
const endpoint_type& endpoint, bool reuse_addr = true)
: basic_io_object<BOOST_ASIO_SVC_T>(io_context)
{
......
}
Então o acceptor
aceitará as conexões dos clientes. O código abaixo mostra o endereço do cliente e fecha a conexão:
#include <boost/asio.hpp>
#include <iostream>
int main()
{
try
{
boost::asio::io_context io_context;
boost::asio::ip::tcp::acceptor acceptor{
io_context,
boost::asio::ip::tcp::endpoint{boost::asio::ip::tcp::v6(), 3303}};
while (1)
{
boost::asio::ip::tcp::socket socket{io_context};
acceptor.accept(socket);
std::cout << socket.remote_endpoint() << " connects to " << socket.local_endpoint() << '\n';
}
}
catch (std::exception& e)
{
std::cerr << e.what() << '\n';
return -1;
}
return 0;
}
O resultado da execução será:
[::ffff:10.217.242.61]:39290 connects to [::ffff:192.168.35.145]:3303
......