| Can you try this: https://www.netbsd.org/~christos/res_kqueue.diff ? 
 christos 
 #include <netdb.h>#include <stdio.h>#include <unistd.h>#include <sys/wait.h>#include <fcntl.h>int main(int argc, char ** argv) {       struct addrinfo * res;       getaddrinfo("www.netbsd.org", NULL, NULL, &res);       pid_t pid = fork();       if (pid < 0) {               perror("fork");               return 1;       }       if (!pid) {               // child               int fd = open("/etc/hosts", O_RDONLY);               getaddrinfo("www.netbsd.com", NULL, NULL, &res);               char buf[101];               int rc;               while (1) {                       rc = read(fd, buf, 100);                       if (rc < 0) { perror("read"); }                       if (rc <= 0) { break; }                       buf[rc] = 0;                       fprintf(stdout, "%s", buf);               }               fprintf(stdout, "\n");               return !rc ? 0 : 1;       } else {               int s;               while (1) {                       waitpid(pid, &s, 0);                       if (!WIFEXITED(s)) {                               fprintf(stdout, "not ready\n");                               continue;                       }                       return WEXITSTATUS(s);                       break;               }       }}
 |