MCPcopy Create free account
hub / github.com/catboost/catboost / GetLocalAddresses

Function GetLocalAddresses

library/cpp/netliba/v12/udp_address.cpp:114–171  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

112 }
113
114 bool GetLocalAddresses(TVector<TUdpAddress>* addrs) {
115#ifdef _win_
116 TVector<char> buf;
117 buf.resize(1000000);
118 PIP_ADAPTER_ADDRESSES adapterBuf = (PIP_ADAPTER_ADDRESSES)&buf[0];
119 ULONG bufSize = buf.ysize();
120
121 ULONG rv = GetAdaptersAddresses(AF_UNSPEC, 0, NULL, adapterBuf, &bufSize);
122 if (rv != ERROR_SUCCESS)
123 return false;
124 for (PIP_ADAPTER_ADDRESSES ptr = adapterBuf; ptr; ptr = ptr->Next) {
125 if ((ptr->Flags & (IP_ADAPTER_IPV4_ENABLED | IP_ADAPTER_IPV6_ENABLED)) == 0) {
126 continue;
127 }
128 if (ptr->IfType == IF_TYPE_TUNNEL) {
129 // ignore tunnels
130 continue;
131 }
132 if (ptr->OperStatus != IfOperStatusUp) {
133 // ignore disable adapters
134 continue;
135 }
136 if (ptr->Mtu < 1280) {
137 fprintf(stderr, "WARNING: MTU %lu is less then ipv6 minimum", ptr->Mtu);
138 }
139 for (IP_ADAPTER_UNICAST_ADDRESS* addr = ptr->FirstUnicastAddress; addr; addr = addr->Next) {
140 sockaddr* x = (sockaddr*)addr->Address.lpSockaddr;
141 if (x == 0)
142 continue;
143 if (x->sa_family == AF_INET || x->sa_family == AF_INET6) {
144 TUdpAddress address;
145 sockaddr_in6* xx = (sockaddr_in6*)x;
146 GetUdpAddress(&address, *xx);
147 addrs->push_back(address);
148 }
149 }
150 }
151 return true;
152#else
153 ifaddrs* ifap;
154 if (getifaddrs(&ifap) != -1) {
155 for (ifaddrs* ifa = ifap; ifa; ifa = ifa->ifa_next) {
156 sockaddr* sa = (sockaddr*)ifa->ifa_addr;
157 if (sa == nullptr)
158 continue;
159 if (sa->sa_family == AF_INET || sa->sa_family == AF_INET6) {
160 TUdpAddress address;
161 sockaddr_in6* xx = (sockaddr_in6*)sa;
162 GetUdpAddress(&address, *xx);
163 addrs->push_back(address);
164 }
165 }
166 freeifaddrs(ifap);
167 return true;
168 }
169 return false;
170#endif
171 }

Callers 1

InitMethod · 0.70

Calls 6

getifaddrsFunction · 0.85
freeifaddrsFunction · 0.85
GetUdpAddressFunction · 0.70
resizeMethod · 0.45
ysizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected