I'm writing a server in C++ using Boost ASIO library. I'd like to get the string representation of client IP to be shown in my server's logs. Does anyone know how to do it?
Asked
Active
Viewed 4.1k times
2 Answers
94
The socket has a function that will retrieve the remote endpoint. I'd give this (long-ish) chain of commands a go, they should retrieve the string representation of the remote end IP address:
asio::ip::tcp::socket socket(io_service);
// Do all your accepting and other stuff here.
asio::ip::tcp::endpoint remote_ep = socket.remote_endpoint();
asio::ip::address remote_ad = remote_ep.address();
std::string s = remote_ad.to_string();
or the one-liner version:
asio::ip::tcp::socket socket(io_service);
// Do all your accepting and other stuff here.
std::string s = socket.remote_endpoint().address().to_string();

paxdiablo
- 854,327
- 234
- 1,573
- 1,953
-
Thanks for your answer, I figured out the chain can be written simply as: socket.remote_endpoint().address().to_string() – kyku Mar 02 '09 at 19:40
-
3Yeah, that's how I would have done it (assuming there was no possibilities of nulls or errors at interim points). I left it expanded for explanatory purposes. In my opinion, the one-liner version is better (I like my code relatively compact so I can see more of it on a screen). – paxdiablo Mar 02 '09 at 22:40
26
Or, even easier, with boost::lexical_cast
:
#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(socket.remote_endpoint());

marton78
- 3,899
- 2
- 27
- 38
-
2This is very useful because it includes both the `address()` and `port()`, which `address().to_string()` leaves out. – Sean Apr 10 '13 at 08:36
-
1
-