Net-ext
view release on metacpan or search on metacpan
newXSconstPVN("Net::Inet::INADDR_UNSPEC_GROUP",
(char*)&ina, sizeof ina, file);
}
MODULE = Net::Gen PACKAGE = Net::Inet
bool
IN_CLASSA(hostaddr)
sv_inaddr_t hostaddr
bool
IN_CLASSB(hostaddr)
sv_inaddr_t hostaddr
bool
IN_CLASSC(hostaddr)
sv_inaddr_t hostaddr
bool
IN_CLASSD(hostaddr)
sv_inaddr_t hostaddr
bool
IN_MULTICAST(hostaddr)
sv_inaddr_t hostaddr
bool
IN_EXPERIMENTAL(hostaddr)
sv_inaddr_t hostaddr
bool
IN_BADCLASS(hostaddr)
sv_inaddr_t hostaddr
bool
IPOPT_COPIED(ipopt)
U8 ipopt
U8
IPOPT_CLASS(ipopt)
U8 ipopt
U8
IPOPT_NUMBER(ipopt)
U8 ipopt
bool
ICMP_INFOTYPE(icmp_code)
U8 icmp_code
void
_pack_sockaddr_in(family,port,address)
U8 family
U16 port
SV * address
PREINIT:
struct sockaddr_in sin;
char * adata;
STRLEN adlen;
PPCODE:
Zero(&sin, sizeof sin, char);
sin.sin_family = family;
adata = SvPV(address, adlen);
sin.sin_port = htons(port);
if (adlen == sizeof sin.sin_addr) {
Copy(adata, &sin.sin_addr, sizeof sin.sin_addr, char);
ST(0) = sv_2mortal(newSVpv((char*)&sin, sizeof sin));
}
else {
SV *adsv = sv_2mortal(newSVpv((char*)&sin,
STRUCT_OFFSET(struct sockaddr_in,
sin_addr)));
sv_catpvn(adsv, adata, adlen);
ST(0) = adsv;
}
XSRETURN(1);
void
unpack_sockaddr_in(sad)
SV * sad
PREINIT:
char * cp;
struct sockaddr_in sin;
STRLEN len;
PPCODE:
if ((cp = SvPV(sad, len)) != (char*)0 && len >= sizeof sin) {
U16 family;
U16 port;
char * adata;
STRLEN addrlen;
Copy(cp, &sin, sizeof sin, char);
family = sin.sin_family;
if (family > 255) { /* 4.4BSD anyone? */
U8 famlen1, famlen2;
famlen1 = family & 255;
famlen2 = (family >> 8) & 255;
if (famlen1 == famlen2) {
family = famlen1;
}
else if (famlen1 == len) {
family = famlen2;
}
else if (famlen2 == len) {
family = famlen1;
}
else if (famlen1 == AF_INET || famlen2 == AF_INET) {
family = AF_INET;
}
else if (famlen1 < famlen2) {
family = famlen1;
}
else {
family = famlen2;
}
}
port = ntohs(sin.sin_port);
/* now work on the address */
cp += STRUCT_OFFSET(struct sockaddr_in, sin_addr);
addrlen = len - STRUCT_OFFSET(struct sockaddr_in, sin_addr);
if (family == AF_INET && len == sizeof sin)
addrlen = sizeof sin.sin_addr;
EXTEND(sp,3);
PUSHs(sv_2mortal(newSViv((IV)family)));
PUSHs(sv_2mortal(newSViv((IV)port)));
PUSHs(sv_2mortal(newSVpv(cp, addrlen)));
}
MODULE = Net::Gen PACKAGE = Net::Gen PREFIX = f_ic_
BOOT:
#ifdef EOF_NONBLOCK
#define f_ic_EOF_NONBLOCK 1
#else
#define f_ic_EOF_NONBLOCK 0
#endif
newXSconstIV("Net::Gen::EOF_NONBLOCK", f_ic_EOF_NONBLOCK, file);
#ifdef RD_NODATA
newXSconstIV("Net::Gen::RD_NODATA", RD_NODATA, file);
#else
newmissing(missing, "Net::Gen::RD_NODATA", file);
#endif
newXSconstIV("Net::Gen::SHUT_RD", SHUT_RD, file);
#ifdef PF_LAST
newXSconstUV("Net::Gen::PF_LAST", PF_LAST, file);
#else
newmissing(missing, "Net::Gen::PF_LAST", file);
#endif
newXSconstUV("Net::Gen::ENOENT", ENOENT, file);
newXSconstUV("Net::Gen::EINVAL", EINVAL, file);
newXSconstUV("Net::Gen::EBADF", EBADF, file);
newXSconstUV("Net::Gen::EAGAIN", EAGAIN, file);
newXSconstUV("Net::Gen::EWOULDBLOCK", EWOULDBLOCK, file);
newXSconstUV("Net::Gen::EINPROGRESS", EINPROGRESS, file);
newXSconstUV("Net::Gen::EALREADY", EALREADY, file);
newXSconstUV("Net::Gen::ENOTSOCK", ENOTSOCK, file);
newXSconstUV("Net::Gen::EDESTADDRREQ", EDESTADDRREQ, file);
newXSconstUV("Net::Gen::EMSGSIZE", EMSGSIZE, file);
newXSconstUV("Net::Gen::EPROTOTYPE", EPROTOTYPE, file);
newXSconstUV("Net::Gen::ENOPROTOOPT", ENOPROTOOPT, file);
newXSconstUV("Net::Gen::EPROTONOSUPPORT", EPROTONOSUPPORT, file);
newXSconstUV("Net::Gen::ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, file);
newXSconstUV("Net::Gen::EOPNOTSUPP", EOPNOTSUPP, file);
newXSconstUV("Net::Gen::EPFNOSUPPORT", EPFNOSUPPORT, file);
newXSconstUV("Net::Gen::EAFNOSUPPORT", EAFNOSUPPORT, file);
newXSconstUV("Net::Gen::EADDRINUSE", EADDRINUSE, file);
newXSconstUV("Net::Gen::EADDRNOTAVAIL", EADDRNOTAVAIL, file);
newXSconstUV("Net::Gen::ENETDOWN", ENETDOWN, file);
newXSconstUV("Net::Gen::ENETUNREACH", ENETUNREACH, file);
newXSconstUV("Net::Gen::ENETRESET", ENETRESET, file);
newXSconstUV("Net::Gen::ECONNABORTED", ECONNABORTED, file);
newXSconstUV("Net::Gen::ECONNRESET", ECONNRESET, file);
newXSconstUV("Net::Gen::ENOBUFS", ENOBUFS, file);
newXSconstUV("Net::Gen::EISCONN", EISCONN, file);
newXSconstUV("Net::Gen::ENOTCONN", ENOTCONN, file);
newXSconstUV("Net::Gen::ESHUTDOWN", ESHUTDOWN, file);
newXSconstUV("Net::Gen::ETOOMANYREFS", ETOOMANYREFS, file);
newXSconstUV("Net::Gen::ETIMEDOUT", ETIMEDOUT, file);
newXSconstUV("Net::Gen::ECONNREFUSED", ECONNREFUSED, file);
newXSconstUV("Net::Gen::EHOSTDOWN", EHOSTDOWN, file);
newXSconstUV("Net::Gen::EHOSTUNREACH", EHOSTUNREACH, file);
newXSconstUV("Net::Gen::ENOSR", ENOSR, file);
newXSconstUV("Net::Gen::ETIME", ETIME, file);
newXSconstUV("Net::Gen::EBADMSG", EBADMSG, file);
newXSconstUV("Net::Gen::EPROTO", EPROTO, file);
newXSconstUV("Net::Gen::ENODATA", ENODATA, file);
newXSconstUV("Net::Gen::ENOSTR", ENOSTR, file);
newXSconstUV("Net::Gen::SOMAXCONN", SOMAXCONN, file);
MODULE = Net::Gen PACKAGE = Net::Gen
BOOT:
}
void
pack_sockaddr(family,address)
U8 family
SV * address
PREINIT:
struct sockaddr sad;
char * adata;
STRLEN adlen;
PPCODE:
Zero(&sad, sizeof sad, char);
sad.sa_family = family;
adata = SvPV(address, adlen);
if (adlen > sizeof(sad.sa_data)) {
SV * rval = sv_newmortal();
sv_setpvn(rval, (char*)&sad, sizeof sad - sizeof sad.sa_data);
sv_catpvn(rval, adata, adlen);
ST(0) = rval;
}
else {
Copy(adata, &sad.sa_data, adlen, char);
ST(0) = sv_2mortal(newSVpv((char*)&sad, sizeof sad));
}
XSRETURN(1);
void
unpack_sockaddr(sad)
SV * sad
PREINIT:
char * cp;
STRLEN len;
PPCODE:
if ((cp = SvPV(sad, len)) != (char*)0) {
struct sockaddr sa;
U16 family;
SV * famsv;
SV * datsv;
if (len < sizeof sa - sizeof sa.sa_data)
Zero(&sa, sizeof sa - sizeof sa.sa_data, char);
Copy(cp, &sa, len < sizeof sa ? len : sizeof sa, char);
family = sa.sa_family;
if (family > 255) { /* 4.4bsd anyone? */
U8 famlen1, famlen2;
famlen1 = family & 255;
famlen2 = family >> 8;
if (famlen1 == famlen2)
family = famlen1;
else if (famlen1 == len)
family = famlen2;
else if (famlen2 == len)
family = famlen1;
}
famsv = sv_2mortal(newSViv(family));
if (len >= sizeof sa - sizeof sa.sa_data) {
len -= sizeof sa - sizeof sa.sa_data;
datsv = sv_2mortal(newSVpv(cp + (sizeof sa - sizeof sa.sa_data),
len));
}
else {
datsv = sv_mortalcopy(&PL_sv_undef);
}
EXTEND(sp, 2);
PUSHs(famsv);
PUSHs(datsv);
}
( run in 2.031 seconds using v1.01-cache-2.11-cpan-71847e10f99 )