forked from premiere/premiere-libtorrent
updates to enum_net
This commit is contained in:
parent
01c20353a4
commit
587d40e1ae
|
@ -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 ;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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__)
|
||||
|
|
Loading…
Reference in New Issue