AnyEvent-FastPing
view release on metacpan or search on metacpan
FastPing.xs view on Meta::CPAN
}
void
_new (SV *klass, UV magic1, UV magic2, UV magic3)
PPCODE:
{
SV *pv = NEWSV (0, sizeof (PINGER));
PINGER *self = (PINGER *)SvPVX (pv);
SvPOK_only (pv);
XPUSHs (sv_2mortal (sv_bless (newRV_noinc (pv), gv_stashpv (SvPVutf8_nolen (klass), 1))));
pinger_init (self);
self->magic1 = magic1;
self->magic2 = magic2;
self->magic3 = magic3;
}
void
_free (PINGER *self)
CODE:
pinger_free (self);
FastPing.xs view on Meta::CPAN
if (!SvROK (addrs) || SvTYPE (SvRV (addrs)) != SVt_PVAV)
croak ("AnyEvent::FastPing::add_hosts expects an arrayref with binary IPv4 or IPv6 addresses");
av = (AV *)SvRV (addrs);
cnt = av_len (av) + 1;
for (i = 0; i < cnt; ++i)
{
SV *sv = *av_fetch (av, i, 1);
sv_utf8_downgrade (sv, 0);
j = SvCUR (sv);
if (j != 4 && j != 16)
croak ("AnyEvent::FastPing::add_hosts addresses must be specified as binary IPv4 or IPv6 addresses");
if (j > addrlen)
addrlen = j;
}
FastPing.xs view on Meta::CPAN
interleave = cnt <= 256 * 256 ? 256 : (int)sqrtf (cnt);
k = cnt;
for (j = 0; j < interleave; ++j)
for (i = j; i < cnt; i += interleave)
{
uint8_t *dst = (uint8_t *)(range + 1) + --k * addrlen;
char *pv;
STRLEN pvlen;
SV *sv = *av_fetch (av, i, 1);
sv_utf8_downgrade (sv, 0);
pv = SvPVbyte (sv, pvlen);
if (pvlen != addrlen)
{
dst [ 0] = 0x00; dst [ 1] = 0x00; dst [ 2] = 0x00; dst [ 3] = 0x00;
dst [ 4] = 0x00; dst [ 5] = 0x00; dst [ 6] = 0x00; dst [ 7] = 0x00;
dst [ 8] = 0x00; dst [ 9] = 0x00; dst [10] = 0xff; dst [11] = 0xff;
dst [12] = pv [0]; dst [13] = pv [1]; dst [14] = pv [2]; dst [15] = pv [3];
}
( run in 0.533 second using v1.01-cache-2.11-cpan-49f99fa48dc )