Socket6

 view release on metacpan or  search on metacpan

Socket6.xs  view on Meta::CPAN


double
constant(name,arg)
	char *		name
	int		arg

void
gethostbyname2(host, af)
	char *	host;
	int	af;
	PPCODE:
{
#ifdef HAVE_GETHOSTBYNAME2
	struct hostent *phe;
	int count, i;

	if ((phe = gethostbyname2(host, af)) != NULL) {
		for (count = 0; phe->h_addr_list[count]; ++count);
		EXTEND(sp, 4 + count);
		PUSHs(sv_2mortal(newSVpv((char *) phe->h_name,
					 strlen(phe->h_name))));

Socket6.xs  view on Meta::CPAN


	ST(0) = sv_2mortal(newSVpv((char *)&sin, sizeof sin));
#else
	ST(0) = (SV *) not_here("pack_sockaddr_in6_all");
#endif
}

void
unpack_sockaddr_in6(sin_sv)
	SV *	sin_sv
	PPCODE:
{
#ifdef INET6_ADDRSTRLEN
	STRLEN sockaddrlen;
	struct sockaddr_in6 addr;
	unsigned short	port;
	struct in6_addr	ip6_address;
	char *	sin = SvPV(sin_sv,sockaddrlen);
	if (sockaddrlen != sizeof(addr)) {
		croak("Bad arg length for %s, length is %d, should be %d",
		      "Socket6::unpack_sockaddr_in6",

Socket6.xs  view on Meta::CPAN

	PUSHs(sv_2mortal(newSViv((IV) port)));
	PUSHs(sv_2mortal(newSVpv((char *)&ip6_address,sizeof ip6_address)));
#else
	ST(0) = (SV *) not_here("unpack_sockaddr_in6");
#endif
}

void
unpack_sockaddr_in6_all(sin_sv)
	SV *	sin_sv
	PPCODE:
{
#ifdef INET6_ADDRSTRLEN
	STRLEN sockaddrlen;
	struct sockaddr_in6 addr;
	unsigned short	port;
	unsigned long	flowinfo;
	struct in6_addr	ip6_address;
	unsigned long	scope_id;
	char *	sin = SvPV(sin_sv,sockaddrlen);
	if (sockaddrlen != sizeof(addr)) {

Socket6.xs  view on Meta::CPAN

}

void
getaddrinfo(host,port,family=0,socktype=0,protocol=0,flags=0)
	char *	host
	char *	port
	int	family
	int	socktype
	int	protocol
	int	flags
	PPCODE:
{
#ifdef HAVE_GETADDRINFO
	struct addrinfo hints, * res;
	int	err;
	int	count;
	const char	*error;
	WSA_DECLARE;

	Zero( &hints, sizeof hints, char );
	hints.ai_flags = flags;

Socket6.xs  view on Meta::CPAN

	}
#else
	ST(0) = (SV *) not_here("getaddrinfo");
#endif
}

void
getnameinfo(sin_sv, flags = 0)
	SV *	sin_sv
	int flags;
	PPCODE:
{
#ifdef HAVE_GETNAMEINFO
	STRLEN sockaddrlen;
	struct sockaddr * sin = (struct sockaddr *)SvPV(sin_sv,sockaddrlen);
	char host[NI_MAXHOST];
	char port[NI_MAXSERV];
	int	err;
	const char	*error;
	WSA_DECLARE;

Socket6.xs  view on Meta::CPAN

	int	family
	int	flags
	PREINIT:
#ifdef HAVE_GETIPNODEBYNAME
	struct hostent	*he;
	int		err;
	char		**p;
	SV		*temp, *address_ref, *alias_ref;
	AV		*address_list, *alias_list;
#endif
	PPCODE:
{
#ifdef HAVE_GETIPNODEBYNAME
	he = getipnodebyname(hostname, family, flags, &err);

	if (err == 0) {
		XPUSHs(sv_2mortal(newSVpv(he->h_name, strlen(he->h_name))));
		XPUSHs(sv_2mortal(newSViv(he->h_addrtype)));
		XPUSHs(sv_2mortal(newSViv(he->h_length)));

		address_list = newAV();

Socket6.xs  view on Meta::CPAN

#ifdef HAVE_GETIPNODEBYADDR
	STRLEN		addrlen;
	struct hostent	*he;
	int		err, alen;
	char		**p;
	SV		*temp, *address_ref, *alias_ref;
	AV		*address_list, *alias_list;
	struct in6_addr	addr;
	char		*addr_buffer;
#endif
	PPCODE:
{
#ifdef HAVE_GETIPNODEBYADDR
	addr_buffer = SvPV(address_sv, addrlen);

	switch(family) {

	case AF_INET:
		alen = sizeof(struct in_addr);
		break;
	case AF_INET6:



( run in 0.652 second using v1.01-cache-2.11-cpan-5511b514fd6 )