Socket6
view release on metacpan or search on metacpan
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))));
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",
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)) {
}
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;
}
#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;
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();
#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 )