12 #include <sys/socket.h>
13 #include <netinet/in.h>
19 _sock_inip(struct sockaddr *a)
23 return &((struct sockaddr_in*)a)->sin_addr;
25 return &((struct sockaddr_in6*)a)->sin6_addr;
31 _sock_inport(struct sockaddr *a)
35 return ntohs(((struct sockaddr_in*)a)->sin_port);
37 return ntohs(((struct sockaddr_in6*)a)->sin6_port);
43 _sock_inaddr(int af, char *ip, char *port, void *a, int *alen)
49 struct sockaddr_in *in = a;
54 if(port != 0 && *port != 0)
55 in->sin_port = htons(atoi(port));
56 if(ip != 0 && *ip != 0)
57 inet_pton(af, ip, &in->sin_addr);
58 } else if(af == AF_INET6){
59 struct sockaddr_in6 *in = a;
64 if(port != 0 && *port != 0)
65 in->sin6_port = htons(atoi(port));
66 if(ip != 0 && *ip != 0)
67 inet_pton(af, ip, &in->sin6_addr);
75 _sock_ingetaddr(Rock *r, void *a, int *alen, char *file)
77 char name[Ctlsize], *p;
80 if(r->domain != PF_INET && r->domain != PF_INET6)
82 /* get remote address */
84 p = strrchr(name, '/');
86 fd = open(name, O_RDONLY);
88 n = read(fd, name, sizeof(name)-1);
91 p = strchr(name, '!');
94 _sock_inaddr(r->domain, name, p, a, alen);