updates to enum_net

This commit is contained in:
Arvid Norberg 2007-09-20 16:25:07 +00:00
parent 01c20353a4
commit 587d40e1ae
4 changed files with 39 additions and 2 deletions

View File

@ -27,4 +27,5 @@ exe client_test : client_test.cpp
exe simple_client : simple_client.cpp ;
exe dump_torrent : dump_torrent.cpp ;
exe make_torrent : make_torrent.cpp ;
exe enum_if : enum_if.cpp ;

24
examples/enum_if.cpp Normal file
View File

@ -0,0 +1,24 @@
#include <libtorrent/enum_net.hpp>
#include <libtorrent/socket.hpp>
#include <libtorrent/broadcast_socket.hpp>
#include <vector>
using namespace libtorrent;
int main()
{
io_service ios;
asio::error_code ec;
std::vector<address> const& net = enum_net_interfaces(ios, ec);
for (std::vector<address>::const_iterator i = net.begin()
, end(net.end()); i != end; ++i)
{
std::cout << *i << " ";
if (is_multicast(*i)) std::cout << "multicast ";
if (is_local(*i)) std::cout << "local ";
if (is_loopback(*i)) std::cout << "loopback ";
std::cout << std::endl;
}
}

View File

@ -42,6 +42,9 @@ namespace libtorrent
{
bool is_local(address const& a);
bool is_loopback(address const& addr);
bool is_multicast(address const& addr);
address_v4 guess_local_address(asio::io_service&);
typedef boost::function<void(udp::endpoint const& from

View File

@ -72,8 +72,17 @@ namespace libtorrent
ifreq const& item = *reinterpret_cast<ifreq*>(ifr);
if (item.ifr_addr.sa_family == AF_INET)
{
ret.push_back(address::from_string(
inet_ntoa(((sockaddr_in const*)&item.ifr_addr)->sin_addr)));
typedef asio::ip::address_v4::bytes_type bytes_t;
bytes_t b;
memcpy(&b[0], &((sockaddr_in const*)&item.ifr_addr)->sin_addr, b.size());
ret.push_back(address_v4(b));
}
else if (item.ifr_addr.sa_family == AF_INET6)
{
typedef asio::ip::address_v6::bytes_type bytes_t;
bytes_t b;
memcpy(&b[0], &((sockaddr_in6 const*)&item.ifr_addr)->sin6_addr, b.size());
ret.push_back(address_v6(b));
}
#if defined __MACH__ || defined(__FreeBSD__)