Net-ext
view release on metacpan or search on metacpan
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,
}
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;
}
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 {
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;
( run in 0.940 second using v1.01-cache-2.11-cpan-5511b514fd6 )