int link_address_remote(struct link *link, char *addr, int *port) { struct sockaddr_in iaddr; SOCKLEN_T length; int result; length = sizeof(iaddr); result = getpeername(link->fd, (struct sockaddr *) &iaddr, &length); if(result != 0) return 0; *port = ntohs(iaddr.sin_port); string_from_ip_address((unsigned char *) &iaddr.sin_addr, addr); return 1; }
int link_address_local(struct link *link, char *addr, int *port) { struct sockaddr_in iaddr; SOCKLEN_T length; int result; if(link->type == LINK_TYPE_FILE) { return 0; } length = sizeof(iaddr); result = getsockname(link->fd, (struct sockaddr *) &iaddr, &length); if(result != 0) return 0; *port = ntohs(iaddr.sin_port); string_from_ip_address((unsigned char *) &iaddr.sin_addr, addr); return 1; }