Exemplo n.º 1
0
static int sockaddr_convert_from_un(const struct socket_info *si, 
				    const struct sockaddr_un *in_addr, 
				    socklen_t un_addrlen,
				    int family,
				    struct sockaddr *out_addr,
				    socklen_t *_out_addrlen)
{
	socklen_t out_addrlen;

	if (out_addr == NULL || _out_addrlen == NULL) 
		return 0;

	if (un_addrlen == 0) {
		*_out_addrlen = 0;
		return 0;
	}

	out_addrlen = *_out_addrlen;
	if (out_addrlen > un_addrlen) {
		out_addrlen = un_addrlen;
	}

	switch (family) {
	case AF_INET:
		switch (si->type) {
		case SOCK_STREAM:
		case SOCK_DGRAM:
			break;
		default:
			errno = ESOCKTNOSUPPORT;
			return -1;
		}
		return convert_un_in(in_addr, (struct sockaddr_in *)out_addr, _out_addrlen);
	default:
		break;
	}

	errno = EAFNOSUPPORT;
	return -1;
}
Exemplo n.º 2
0
static int sockaddr_convert_from_un(const struct socket_info *si, 
				    const struct sockaddr_un *in_addr, 
				    socklen_t un_addrlen,
				    int family,
				    struct sockaddr *out_addr,
				    socklen_t *out_addrlen)
{
	if (out_addr == NULL || out_addrlen == NULL) 
		return 0;

	if (un_addrlen == 0) {
		*out_addrlen = 0;
		return 0;
	}

	switch (family) {
	case AF_INET:
#ifdef HAVE_IPV6
	case AF_INET6:
#endif
		switch (si->type) {
		case SOCK_STREAM:
		case SOCK_DGRAM:
			break;
		default:
			errno = ESOCKTNOSUPPORT;
			return -1;
		}
		return convert_un_in(in_addr, out_addr, out_addrlen);
	default:
		break;
	}

	errno = EAFNOSUPPORT;
	return -1;
}