I'm trying to pass a socket along a connection handshake, and use std::bind
to do so. The compile issue I'm getting (in one continuous block, which I've added spaces to for readability) is:
'std::_Bind<_Functor(_Bound_args ...)>::_Bind(_Functor&&, _Args&& ...)
[with _Args = {socket_state**, std::function<void(socket_state*)>&, boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::executor>&, boost::asio::io_context&};
_Functor = void (*)(socket_state*, std::function<void(socket_state*)>&, boost::asio::basic_socket_acceptor<boost::asio::ip::tcp>&, boost::asio::io_context&);
_Bound_args = {socket_state**, std::function<void(socket_state*)>, boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::executor>, boost::asio::io_context}]':
My code is below, with the error appearing to nag at the std::bind
arguments given to boost::asio::acceptor.async_accept(socket, ...)
and the parameters for the accept_new_client
method
void start_server(std::function<void(socket_state*)>& func, tcp::acceptor& acceptor, boost::asio::io_context& context)
{
acceptor.listen();
// Start client connection loop
networking::wait_for_client(func, acceptor, context);
}
void wait_for_client(std::function<void(socket_state*)>& func, tcp::acceptor& acceptor, boost::asio::io_context& context)
{
boost::asio::ip::tcp::socket socket(context);
// socket_state is its own class which links a particular socket with an ID and buffer data
// it also holds a function to indicate which part of the connection handshake it needs to go to next
socket_state* state = new socket_state(func, &socket);
acceptor.async_accept(socket, std::bind(&networking::accept_new_client, state, func, acceptor, context));
}
void accept_new_client(socket_state* state, std::function<void(socket_state*)>& func, tcp::acceptor& acceptor, boost::asio::io_context& context)
{
state->on_network_action(state);
wait_for_client(func, acceptor, context);
}
It seems like they would match, but you can see the error state my std::bind
arguments are socket_state**
instead of socket_state*
, and boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::executor>&
instead of boost::asio::basic_socket_acceptor<boost::asio::ip::tcp>&
.
I have no idea what the "with _Args" vs. "_Bound_args" is either.
Aucun commentaire:
Enregistrer un commentaire