1219b2ee8SDavid du Colombier /* posix */ 2219b2ee8SDavid du Colombier #include <sys/types.h> 3219b2ee8SDavid du Colombier #include <unistd.h> 4219b2ee8SDavid du Colombier #include <stdlib.h> 5219b2ee8SDavid du Colombier #include <stdio.h> 6219b2ee8SDavid du Colombier #include <fcntl.h> 7219b2ee8SDavid du Colombier #include <string.h> 8219b2ee8SDavid du Colombier #include <errno.h> 9*6ca6a3e7SDavid du Colombier #include <sys/stat.h> 10219b2ee8SDavid du Colombier 11219b2ee8SDavid du Colombier /* bsd extensions */ 12219b2ee8SDavid du Colombier #include <sys/uio.h> 13219b2ee8SDavid du Colombier #include <sys/socket.h> 14219b2ee8SDavid du Colombier #include <netinet/in.h> 15219b2ee8SDavid du Colombier #include <sys/un.h> 16219b2ee8SDavid du Colombier 17219b2ee8SDavid du Colombier #include "priv.h" 18219b2ee8SDavid du Colombier 19219b2ee8SDavid du Colombier int getpeername(int fd,void * addr,int * alen)20781103c4SDavid du Colombiergetpeername(int fd, void *addr, int *alen) 21219b2ee8SDavid du Colombier { 22219b2ee8SDavid du Colombier Rock *r; 23219b2ee8SDavid du Colombier int i; 24219b2ee8SDavid du Colombier struct sockaddr_in *rip; 25219b2ee8SDavid du Colombier struct sockaddr_un *runix; 26219b2ee8SDavid du Colombier 27219b2ee8SDavid du Colombier r = _sock_findrock(fd, 0); 28219b2ee8SDavid du Colombier if(r == 0){ 29219b2ee8SDavid du Colombier errno = ENOTSOCK; 30219b2ee8SDavid du Colombier return -1; 31219b2ee8SDavid du Colombier } 32219b2ee8SDavid du Colombier 33219b2ee8SDavid du Colombier switch(r->domain){ 34219b2ee8SDavid du Colombier case PF_INET: 35219b2ee8SDavid du Colombier rip = (struct sockaddr_in*)&r->raddr; 36219b2ee8SDavid du Colombier memmove(addr, rip, sizeof(struct sockaddr_in)); 37219b2ee8SDavid du Colombier *alen = sizeof(struct sockaddr_in); 38219b2ee8SDavid du Colombier break; 39219b2ee8SDavid du Colombier case PF_UNIX: 40219b2ee8SDavid du Colombier runix = (struct sockaddr_un*)&r->raddr; 41219b2ee8SDavid du Colombier i = &runix->sun_path[strlen(runix->sun_path)] - (char*)runix; 42219b2ee8SDavid du Colombier memmove(addr, runix, i); 43219b2ee8SDavid du Colombier *alen = i; 44219b2ee8SDavid du Colombier break; 45219b2ee8SDavid du Colombier default: 46219b2ee8SDavid du Colombier errno = EAFNOSUPPORT; 47219b2ee8SDavid du Colombier return -1; 48219b2ee8SDavid du Colombier } 49219b2ee8SDavid du Colombier return 0; 50219b2ee8SDavid du Colombier } 51