How to create a Boost.Asio socket from a native so

2019-02-04 20:49发布

I am merely trying to create a boost ip::tcp::socket from an existing native socket. In the assign function, the first parameter must be a "protocol_type" and the second must be a "native_type", but it never explains what these are or gives an example of its use.

I'm guessing the second should be the socket descriptor, but I'd really appreciate clarification.

void SendData (int socket, std::string message)
{
    boost::asio::io_service ioserv;
    boost::asio::ip::tcp::socket s(ioserv);
    s.assign(/* what goes here? */, /* ..and here? */);
    s.send(boost::asio::buffer(message));
}

1条回答
▲ chillily
2楼-- · 2019-02-04 21:37

"Native type" is just the socket handle, in this case the int stored in "socket".

"Protocol type" is the the protocol. For a TCP over standard IP using stream socket, this would be the return value from boost::asio::ip::tcp::v4(). Substitute as appropriate for datagram sockets, IPv6, etc.

So:

s.assign(boost::asio::ip::tcp::v4(), socket);

Adjusted as appropriate for what you're trying to do.

查看更多
登录 后发表回答