6 ms·
getaddrinfo is terrible. Did you know it also opens and then connects to a socket? Any process that uses getaddrinfo needs a blanket exception in my firewall in
by LoganDark 3y ago
getaddrinfo is terrible. Did you know it also opens and then connects to a socket? Any process that uses getaddrinfo needs a blanket exception in my firewall in order to work properly, because otherwise it will fail to connect to some randomly-generated port that it just made up.
- tedunangst 3y agoWhat should I use instead that doesn't open a socket?
- hknapp 3y agoThey probably could have given a more apt name
- Sprocklem 3y agoHow do you propose that DNS resolution precede without opening a socket?
- nomadluap 3y agoFor one thing, it could delegate to a local service. Granted, the communication to this service is probably still be over a socket interface, but at least as a purely-local connection you would hopefully have some better worst-case performance characteristics. This is basically what dnsmasq does when you use it as a local DNS cache.
- kccqzy 3y agoCompletely agree. Just use systemd-resolved which is the recommended way of doing DNS anyway.
- LoganDark 3y agoIt opens a socket to the same process that called getaddrinfo. That is, it's just communicating with itself, using a brand-new randomly-generated port for each call. This should be completely unnecessary.
- JackSlateur 3y agoSo, I have a program that does getaddrinfo(3) and nothing more, and this program setup a socket, listen(2) to it, create another socket and connect with it to the first one ? This looks insane and not what strace(1) tells me Could you give me more details ?
- LoganDark 3y agoI didn't know glibc didn't do the same thing. `getaddrinfo()` on Windows seems to do this because randomly a program will try to connect to `::1:59962` or something, and if I don't allow it in my firewall, it will start whining that some getaddrinfo thread failed to start. This has happened across all sorts of different programs. It's infuriating. I thought it was just a general libc thing. Isn't there a spec on this somewhere?