1*219b2ee8SDavid du Colombier /* posix */ 2*219b2ee8SDavid du Colombier #include <sys/types.h> 3*219b2ee8SDavid du Colombier #include <unistd.h> 4*219b2ee8SDavid du Colombier #include <stdlib.h> 5*219b2ee8SDavid du Colombier #include <stdio.h> 6*219b2ee8SDavid du Colombier #include <fcntl.h> 7*219b2ee8SDavid du Colombier #include <errno.h> 8*219b2ee8SDavid du Colombier #include <string.h> 9*219b2ee8SDavid du Colombier 10*219b2ee8SDavid du Colombier /* bsd extensions */ 11*219b2ee8SDavid du Colombier #include <sys/uio.h> 12*219b2ee8SDavid du Colombier #include <sys/socket.h> 13*219b2ee8SDavid du Colombier #include <netinet/in.h> 14*219b2ee8SDavid du Colombier #include <sys/un.h> 15*219b2ee8SDavid du Colombier 16*219b2ee8SDavid du Colombier #include "priv.h" 17*219b2ee8SDavid du Colombier 18*219b2ee8SDavid du Colombier void 19*219b2ee8SDavid du Colombier _sock_ingetaddr(Rock *r, struct sockaddr_in *ip, int *alen, char *a) 20*219b2ee8SDavid du Colombier { 21*219b2ee8SDavid du Colombier int n, fd; 22*219b2ee8SDavid du Colombier char *p; 23*219b2ee8SDavid du Colombier char name[Ctlsize]; 24*219b2ee8SDavid du Colombier 25*219b2ee8SDavid du Colombier /* get remote address */ 26*219b2ee8SDavid du Colombier strcpy(name, r->ctl); 27*219b2ee8SDavid du Colombier p = strrchr(name, '/'); 28*219b2ee8SDavid du Colombier strcpy(p+1, a); 29*219b2ee8SDavid du Colombier fd = open(name, O_RDONLY); 30*219b2ee8SDavid du Colombier if(fd >= 0){ 31*219b2ee8SDavid du Colombier n = read(fd, name, sizeof(name)-1); 32*219b2ee8SDavid du Colombier if(n > 0){ 33*219b2ee8SDavid du Colombier name[n] = 0; 34*219b2ee8SDavid du Colombier p = strchr(name, '!'); 35*219b2ee8SDavid du Colombier if(p){ 36*219b2ee8SDavid du Colombier *p++ = 0; 37*219b2ee8SDavid du Colombier ip->sin_family = AF_INET; 38*219b2ee8SDavid du Colombier ip->sin_port = atoi(p); 39*219b2ee8SDavid du Colombier ip->sin_addr.s_addr = inet_addr(name); 40*219b2ee8SDavid du Colombier if(alen) 41*219b2ee8SDavid du Colombier *alen = sizeof(struct sockaddr_in); 42*219b2ee8SDavid du Colombier } 43*219b2ee8SDavid du Colombier } 44*219b2ee8SDavid du Colombier close(fd); 45*219b2ee8SDavid du Colombier } 46*219b2ee8SDavid du Colombier 47*219b2ee8SDavid du Colombier } 48