12 #include <sys/socket.h>
13 #include <netinet/in.h>
19 netquery(char *buf, int nbuf)
23 if((fd = open("/net/cs", O_RDWR)) < 0)
26 if(write(fd, buf, n) != n){
31 for(i = 0; i < nbuf-1; i += n){
32 n = read(fd, buf+i, nbuf - 1 - i);
43 getnameinfo(struct sockaddr *sa, int salen,
44 char *host, int hostlen,
45 char *serv, int servlen,
48 char buf[8*1024], *b, *p;
51 if(sa->sa_family != AF_INET && sa->sa_family != AF_INET6)
54 if(host != 0 && hostlen > 0){
55 if(inet_ntop(sa->sa_family, _sock_inip(sa), host, hostlen) == 0)
58 if((flags & NI_NUMERICHOST) == 0){
59 snprintf(buf, sizeof(buf), "!ip=%s", host);
60 if((err = netquery(buf, sizeof(buf))) < 0){
61 if((flags & NI_NAMEREQD) != 0)
68 if((p = strchr(b, '=')) == 0)
71 if(strcmp(b, "sys") == 0)
73 else if(strcmp(b, "dom") == 0)
75 while(*p && *p != ' ')
82 if(dom == 0 && (flags & NI_NAMEREQD) != 0)
84 if(dom != 0 && (flags & NI_NOFQDN) != 0){
85 if((p = strchr(dom, '.')) != 0)
90 snprintf(host, hostlen, "%s", sys);
95 if(serv != 0 && servlen > 0){
96 snprintf(serv, servlen, "%d", _sock_inport(sa));
97 if((flags & NI_NUMERICSERV) == 0){
98 snprintf(buf, sizeof(buf), "!port=%s", serv);
99 if(netquery(buf, sizeof(buf)) > 0){
104 if((p = strchr(b, '=')) == 0)
107 if(strcmp(b, "tcp") == 0)
109 else if(strcmp(b, "udp") == 0)
111 while(*p && *p != ' ')
117 if(udp != 0 && (flags & NI_DGRAM) != 0)
118 snprintf(serv, servlen, "%s", udp);
120 snprintf(serv, servlen, "%s", tcp);