When fuzzing our codebase in a restricted syscall setup I noticed that calling `CNetAddr::ToString` triggers the use of the `socket` syscall. The syscall is made indirectly via `getnameinfo`.

AFAICT `getnameinfo` is used in our code only to format IPv6 addresses in their "shortened" form. I think our formatting only use case should be possible to fully cover without involving the kernel via `socket` :)

Not a big deal of course, but it would be nice if kept the direct and indirect use of networking related syscalls such as `socket` to functions where they cannot be avoided. That would make reasoning about syscall restrictions and/or application-vs-kernel boundaries somewhat easier. 

The call chain is: `CNetAddr::ToString` > `CNetAddr::ToStringIP` > `getnameinfo` > `gni_host` > `gni_host_inet`  > `gni_host_inet_numeric` > `if_indextoname` > `__opensock` > `socket`.

Live demo:

```
$ FUZZ=netaddress src/test/fuzz/fuzz
…
ERROR: The syscall "socket" (syscall number 41) is not allowed by the syscall sandbox in thread "test". Please report. Exiting.
terminate called without an active exception
==13417== ERROR: libFuzzer: deadly signal
    #0 0x5581be296819 in __sanitizer_print_stack_trace compiler-rt/lib/ubsan/ubsan_diag_standalone.cpp:33
    #1 0x5581be22e9f8 in fuzzer::PrintStackTrace() compiler-rt/lib/fuzzer/FuzzerUtil.cpp:210                                                                                                                                                                                        #2 0x5581be15a14a in fuzzer::Fuzzer::CrashCallback() (.part.48) compiler-rt/lib/fuzzer/FuzzerLoop.cpp:233
    #3 0x5581be20ab47 in fuzzer::Fuzzer::CrashCallback() compiler-rt/lib/fuzzer/FuzzerLoop.cpp:205
    #4 0x5581be20ab47 in fuzzer::Fuzzer::StaticCrashSignalCallback() compiler-rt/lib/fuzzer/FuzzerLoop.cpp:204
    #5 0x7f3139b2089f  (/lib/x86_64-linux-gnu/libpthread.so.0+0x1289f)
    #6 0x7f3138526f46 in __libc_signal_restore_set /build/glibc-2ORdQG/glibc-2.27/signal/../sysdeps/unix/sysv/linux/nptl-signals.h:80
    #7 0x7f3138526f46 in raise /build/glibc-2ORdQG/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:48
    #8 0x7f31385288b0 in abort /build/glibc-2ORdQG/glibc-2.27/stdlib/abort.c:79
    #9 0x7f3139db9956  (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x8c956)
    #10 0x7f3139dbfae5  (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x92ae5)
    #11 0x7f3139dbfb20 in std::terminate() (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x92b20)
    #12 0x5581bec4e6f7 in (anonymous namespace)::SyscallSandboxDebugSignalHandler(int, siginfo_t*, void*) src/util/syscall_sandbox.cpp:71:5
    #13 0x7f3139b2089f  (/lib/x86_64-linux-gnu/libpthread.so.0+0x1289f)
    #14 0x7f313860b076 in socket /build/glibc-2ORdQG/glibc-2.27/socket/../sysdeps/unix/syscall-template.S:78
    #15 0x7f313860b2b0 in __opensock /build/glibc-2ORdQG/glibc-2.27/socket/../sysdeps/unix/sysv/linux/opensock.c:100
    #16 0x7f3138626fd3 in if_indextoname /build/glibc-2ORdQG/glibc-2.27/inet/../sysdeps/unix/sysv/linux/if_index.c:226
    #17 0x7f3138626abd in gni_host_inet_numeric /build/glibc-2ORdQG/glibc-2.27/inet/getnameinfo.c:354
    #18 0x7f3138626abd in gni_host_inet /build/glibc-2ORdQG/glibc-2.27/inet/getnameinfo.c:389
    #19 0x7f3138626abd in gni_host /build/glibc-2ORdQG/glibc-2.27/inet/getnameinfo.c:422
    #20 0x7f3138626abd in getnameinfo /build/glibc-2ORdQG/glibc-2.27/inet/getnameinfo.c:539
    #21 0x5581beab72e3 in CNetAddr::ToStringIP[abi:cxx11]() const src/netaddress.cpp:580:18
…
```
{
    return a.valid == b.valid && a.network == b.network && !memcmp(a.netmask, b.netmask, 16);
}
bool operator<(const CSubNet& a, const CSubNet& b)
{
    return (a.network < b.network || (a.network == b.network && memcmp(a.netmask, b.netmask, 16) < 0));
}
bool SanityCheckASMap(const std::vector<bool>& asmap)
{
    return SanityCheckASMap(asmap, 128); 
}