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

Function GetLocalAddresses

library/cpp/netliba/v6/udp_address.cpp:176–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

174 }
175
176 bool GetLocalAddresses(TVector<TUdpAddress>* addrs) {
177#ifdef _win_
178 TVector<char> buf;
179 buf.resize(1000000);
180 PIP_ADAPTER_ADDRESSES adapterBuf = (PIP_ADAPTER_ADDRESSES)&buf[0];
181 ULONG bufSize = buf.ysize();
182
183 ULONG rv = GetAdaptersAddresses(AF_UNSPEC, 0, NULL, adapterBuf, &bufSize);
184 if (rv != ERROR_SUCCESS)
185 return false;
186 for (PIP_ADAPTER_ADDRESSES ptr = adapterBuf; ptr; ptr = ptr->Next) {
187 if ((ptr->Flags & (IP_ADAPTER_IPV4_ENABLED | IP_ADAPTER_IPV6_ENABLED)) == 0) {
188 continue;
189 }
190 if (ptr->IfType == IF_TYPE_TUNNEL) {
191 // ignore tunnels
192 continue;
193 }
194 if (ptr->OperStatus != IfOperStatusUp) {
195 // ignore disable adapters
196 continue;
197 }
198 if (ptr->Mtu < 1280) {
199 fprintf(stderr, "WARNING: MTU %lu is less then ipv6 minimum", ptr->Mtu);
200 }
201 for (IP_ADAPTER_UNICAST_ADDRESS* addr = ptr->FirstUnicastAddress; addr; addr = addr->Next) {
202 sockaddr* x = (sockaddr*)addr->Address.lpSockaddr;
203 if (x == 0)
204 continue;
205 if (x->sa_family == AF_INET || x->sa_family == AF_INET6) {
206 TUdpAddress address;
207 sockaddr_in6* xx = (sockaddr_in6*)x;
208 GetUdpAddress(&address, *xx);
209 addrs->push_back(address);
210 }
211 }
212 }
213 return true;
214#else
215 ifaddrs* ifap;
216 if (getifaddrs(&ifap) != -1) {
217 for (ifaddrs* ifa = ifap; ifa; ifa = ifa->ifa_next) {
218 sockaddr* sa = (sockaddr*)ifa->ifa_addr;
219 if (sa == nullptr)
220 continue;
221 if (sa->sa_family == AF_INET || sa->sa_family == AF_INET6) {
222 TUdpAddress address;
223 sockaddr_in6* xx = (sockaddr_in6*)sa;
224 GetUdpAddress(&address, *xx);
225 addrs->push_back(address);
226 }
227 }
228 freeifaddrs(ifap);
229 return true;
230 }
231 return false;
232#endif
233 }

Callers 1

InitLocalIPListFunction · 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