An often overlooked function that requires no external library, but basically has no documentation whatsoever.
How to use getaddrinfo_a to do async resolve with glibc
10.9k Views Asked by sztanpet At
1
There are 1 best solutions below
Related Questions in C
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in DNS
- AWS Dns record A not navigate to elb
- I created a domain name from cloudflare, and Hoisted my static site hosted in google firebase, error in adding custom domain in firebase
- I am the domain admin, newbie, how do I connect youtube.com on my domain?
- The problem with raising the DNS server on Ubuntu 20.04 - bind9
- I registered a service in eureka which is resolving through java code. But it is not able to resolve its name when hitting through chrome or postman
- Assigned A record for Subdomain in Cloud DNS to Compute Engine VM instance but not propagated/resolved yet
- Why Bind9 responds with latency for RPZ rule?
- Create aws certification for domain
- Make Bind DNS server to request only root DNS servers of IANA website
- Domain Still Redirecting Despite Transferring Out of Godaddy
- Set up MX records in apache/Ubuntu to point to external mail server
- Changing AWS registred domain back to AWS name servers
- Docker networking forwarding failed
- Can access IP address of domain via mobile but not wifi
- CURL got Could not resolve host: my subdomain
Related Questions in GLIBC
- Format String Exploitation - Unkown differences in leaked LIBC addresses
- How to use a newer linker and glibc in a Kotlin/Native project?
- C++ Boost program how to statically compiled with musl libc?
- Error "cannot find /usr/lib/libc_nonshared.a" when installing cmake
- Why is fork() accepted in strace if the actual syscall is clone()?
- How do I create an Android make file to merge a glibc based root filesystem into to the AOSP filesystem?
- Why VTune fails with error `[Instrumentation Engine]: __libc_thread_freeres()`?
- How to upgrade Glibc library in Ubuntu 22.04
- Linking to .so with newer symbol
- symbol lookup error: undefined symbol: __pow_finite
- Why can't I run my python executables in busybox?
- Where do man pages about libc come from if they do not come from glibc?
- Error: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found
- C++: performance, free(null)/delete null and `std::move`
- Error while executing make check on glibc build for LFS
Related Questions in GETADDRINFO-A
- Should I think about linked list returned by getaddrinfo when I get addrinfo for my "home" server
- gai_cancel() takes a really long time to succeed
- Is there a non blocking method for host resolution in WINAPI?
- Problem with function getaddrinfo
- BAD_ACCESS on very low number of users during getaddrinfo
- multiple valgrind errors: Conditional jump or move depends on uninitialised value(s)
- Slow response from getaddrinfo
- How to use getaddrinfo_a to do async resolve with glibc
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
UPDATE (2010-10-11): The linux man-pages now have documentation of the getaddrinfo_a, you can find it here: http://www.kernel.org/doc/man-pages/online/pages/man3/getaddrinfo_a.3.html
As a disclaimer I should add that I'm quite new to C but not exactly a newbie, so there might be bugs, or bad coding practices, please do correct me (and my grammar sucks too).
I personally didn't know about it until I came upon this post by Adam Langley, I shall give a few code snippets to illustrate the usage of it and clarify some things that might not be that clear on first use. The benefits of using this is that you get back data readily usable in socket(), listen() and other functions, and if done right you won't have to worry about ipv4/v6 either.
So to start off with the basics, as taken from the link above (you will need to link against libanl (-lanl)) :
Here is the function prototype:
A gaicb struct looks like this:
If you're familiar with getaddrinfo, then these fields correspond to them like so:
The node is the ar_name field, service is the port, the hints argument corresponds to the ar_request member and the result is stored in the rest.
Now you specify how you want to be notified through the sigevent structure:
So basically if you want to look up a hostname you set ar_name to the host and set everything else to NULL, if you want to connect to a host you set ar_name and ar_service , and if you want to create a server you specify ar_service and the ar_result field. You can of course customize the ar_request member to your hearts content, look at man getaddrinfo for more info.
If you have an event loop with select/poll/epoll/kqueue you might want to use signalfd for convenience. Signalfd creates a file descriptor on which you can use the usuall event polling mechanisms like so:
You can of course use a simple signal handler for this job too, look at man sigaction for more info.