Branch Coverage

Socket.xs
Criterion Covered Total %
branch 217 396 54.8


line true false branch
568 19 0 (void) SvUPGRADE(ret, SVt_PVNV);
570 3 16 if(err) {
601 0 15 if(items > 3)
606 1 14 if(items < 1)
611 2 13 if(items < 2)
616 5 10 if(items < 3)
621 1 14 SvGETMAGIC(host);
0 1 SvGETMAGIC(host);
622 1 14 if(SvOK(host)) {
1 0 if(SvOK(host)) {
0 1 if(SvOK(host)) {
623 13 1 hostname = SvPVbyte_nomg(host, len);
624 1 13 if (!len)
628 0 15 SvGETMAGIC(service);
0 0 SvGETMAGIC(service);
629 4 11 if(SvOK(service)) {
4 0 if(SvOK(service)) {
0 4 if(SvOK(service)) {
630 9 2 servicename = SvPVbyte_nomg(service, len);
631 1 10 if (!len)
638 10 5 if(hints && SvOK(hints)) {
1 9 if(hints && SvOK(hints)) {
1 0 if(hints && SvOK(hints)) {
0 1 if(hints && SvOK(hints)) {
642 8 1 if(!SvROK(hints) || SvTYPE(SvRV(hints)) != SVt_PVHV)
1 7 if(!SvROK(hints) || SvTYPE(SvRV(hints)) != SVt_PVHV)
647 2 5 if((valp = hv_fetch(hintshash, "flags", 5, 0)) != NULL && SvOK(*valp))
0 2 if((valp = hv_fetch(hintshash, "flags", 5, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "flags", 5, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "flags", 5, 0)) != NULL && SvOK(*valp))
648 2 0 hints_s.ai_flags = SvIV(*valp);
649 1 6 if((valp = hv_fetch(hintshash, "family", 6, 0)) != NULL && SvOK(*valp))
0 1 if((valp = hv_fetch(hintshash, "family", 6, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "family", 6, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "family", 6, 0)) != NULL && SvOK(*valp))
650 1 0 hints_s.ai_family = SvIV(*valp);
651 7 0 if((valp = hv_fetch(hintshash, "socktype", 8, 0)) != NULL && SvOK(*valp))
0 7 if((valp = hv_fetch(hintshash, "socktype", 8, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "socktype", 8, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "socktype", 8, 0)) != NULL && SvOK(*valp))
652 7 0 hints_s.ai_socktype = SvIV(*valp);
653 1 6 if((valp = hv_fetch(hintshash, "protocol", 8, 0)) != NULL && SvOK(*valp))
0 1 if((valp = hv_fetch(hintshash, "protocol", 8, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "protocol", 8, 0)) != NULL && SvOK(*valp))
0 0 if((valp = hv_fetch(hintshash, "protocol", 8, 0)) != NULL && SvOK(*valp))
654 1 0 hints_s.ai_protocol = SvIV(*valp);
659 0 13 XPUSHs(err_to_SV(aTHX_ err));
661 3 10 if(err)
665 20 10 for(res_iter = res; res_iter; res_iter = res_iter->ai_next) {
674 0 20 if(res_iter->ai_canonname)
679 0 20 XPUSHs(sv_2mortal(newRV_noinc((SV*)res_hv)));
707 6 0 if(items < 1 || items > 3)
0 6 if(items < 1 || items > 3)
713 1 5 SvGETMAGIC(addr);
0 1 SvGETMAGIC(addr);
715 0 6 if(items < 2)
718 6 0 flags = SvIV(ST(1));
720 4 2 if(items < 3)
723 2 0 xflags = SvIV(ST(2));
728 0 6 if(!SvPOKp(addr))
736 5 1 Copy(SvPV_nolen(addr), sa, addr_len, char);
741 5 1 err = getnameinfo((struct sockaddr *)sa, addr_len,
5 1 err = getnameinfo((struct sockaddr *)sa, addr_len,
5 1 err = getnameinfo((struct sockaddr *)sa, addr_len,
5 1 err = getnameinfo((struct sockaddr *)sa, addr_len,
753 0 6 XPUSHs(err_to_SV(aTHX_ err));
755 0 6 if(err)
758 0 6 XPUSHs(want_host ? sv_2mortal(newSVpv(host, 0)) : &PL_sv_undef);
5 1 XPUSHs(want_host ? sv_2mortal(newSVpv(host, 0)) : &PL_sv_undef);
759 0 6 XPUSHs(want_serv ? sv_2mortal(newSVpv(serv, 0)) : &PL_sv_undef);
5 1 XPUSHs(want_serv ? sv_2mortal(newSVpv(serv, 0)) : &PL_sv_undef);
786 16 0 if (!getaddrinfo(host, NULL, &hints, &res)) {
820 1 4 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
1 0 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
1 0 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
822 4 0 ip_address = SvPVbyte(ip_address_sv, addrlen);
823 0 4 if (addrlen == sizeof(addr) || addrlen == 4)
0 0 if (addrlen == sizeof(addr) || addrlen == 4)
849 5 0 char *sockaddr_pv = SvPVbyte(sockaddr, sockaddr_len);
851 1 4 if (sockaddr_len < STRUCT_OFFSET(struct sockaddr, sa_data))
869 1 2 if (!SvOK(pathname))
1 0 if (!SvOK(pathname))
1 0 if (!SvOK(pathname))
874 2 0 pathname_pv = SvPVbyte(pathname,len);
875 1 1 if (len > sizeof(sun_ad.sun_path)) {
908 2 0 if (len > 1 && sun_ad.sun_path[0] == '\0') {
1 1 if (len > 1 && sun_ad.sun_path[0] == '\0') {
938 1 1 if (!SvOK(sun_sv))
1 0 if (!SvOK(sun_sv))
1 0 if (!SvOK(sun_sv))
940 1 0 sun_ad = SvPVbyte(sun_sv,sockaddrlen);
944 1 0 if (sockaddrlen < sizeof(addr)) {
965 0 1 if (addr.sun_family != AF_UNIX)
969 1 0 if (addr.sun_path[0] == '\0') {
984 0 0 while (addr_len < maxlen && addr.sun_path[addr_len])
0 0 while (addr_len < maxlen && addr.sun_path[addr_len])
1005 1 14 if (SvOK(port_sv)) {
1 0 if (SvOK(port_sv)) {
0 1 if (SvOK(port_sv)) {
1006 0 14 port = SvUV(port_sv);
1007 0 14 if (SvUV(port_sv) > 0xFFFF)
1 13 if (SvUV(port_sv) > 0xFFFF)
1011 1 14 if (!SvOK(ip_address_sv))
1 0 if (!SvOK(ip_address_sv))
1 0 if (!SvOK(ip_address_sv))
1013 0 14 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
0 0 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
0 0 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
1015 14 0 ip_address = SvPVbyte(ip_address_sv, addrlen);
1016 0 14 if (addrlen == sizeof(addr) || addrlen == 4)
0 0 if (addrlen == sizeof(addr) || addrlen == 4)
1046 1 8 if (!SvOK(sin_sv))
1 0 if (!SvOK(sin_sv))
1 0 if (!SvOK(sin_sv))
1048 8 0 sin = SvPVbyte(sin_sv,sockaddrlen);
1049 0 8 if (sockaddrlen != sizeof(addr)) {
1055 0 8 if (addr.sin_family != AF_INET) {
1061 7 1 if(GIMME_V == G_LIST) {
7 1 if(GIMME_V == G_LIST) {
1062 0 7 EXTEND(SP, 2);
1084 1 4 if (SvOK(port_sv)) {
1 0 if (SvOK(port_sv)) {
0 1 if (SvOK(port_sv)) {
1085 0 4 port = SvUV(port_sv);
1086 0 4 if (SvUV(port_sv) > 0xFFFF)
1 3 if (SvUV(port_sv) > 0xFFFF)
1090 1 4 if (!SvOK(sin6_addr))
1 0 if (!SvOK(sin6_addr))
1 0 if (!SvOK(sin6_addr))
1092 0 4 if (DO_UTF8(sin6_addr) && !sv_utf8_downgrade(sin6_addr, 1))
0 0 if (DO_UTF8(sin6_addr) && !sv_utf8_downgrade(sin6_addr, 1))
0 0 if (DO_UTF8(sin6_addr) && !sv_utf8_downgrade(sin6_addr, 1))
1094 4 0 addrbytes = SvPVbyte(sin6_addr, addrlen);
1095 0 4 if (addrlen != sizeof(sin6.sin6_addr))
1132 1 7 if (!SvOK(sin6_sv))
1 0 if (!SvOK(sin6_sv))
1 0 if (!SvOK(sin6_sv))
1134 7 0 addrbytes = SvPVbyte(sin6_sv, addrlen);
1135 0 7 if (addrlen != sizeof(sin6))
1140 0 7 if (sin6.sin6_family != AF_INET6)
1145 6 1 if(GIMME_V == G_LIST) {
6 1 if(GIMME_V == G_LIST) {
1146 0 6 EXTEND(SP, 4);
1181 1 5 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
1 0 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
1 0 if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1))
1184 5 0 ip_address = SvPVbyte(ip_address_sv, addrlen);
1188 0 3 if(addrlen != 4)
1194 0 2 if(addrlen != 16)
1209 3 2 if(addrlen < sizeof(addr)) {
1257 6 0 ok = (*host != '\0') && inet_pton(af, host, &ip_address);
6 0 ok = (*host != '\0') && inet_pton(af, host, &ip_address);
1260 6 0 if (ok) {
1280 0 2 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
0 0 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
0 0 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
1282 2 0 multiaddrbytes = SvPVbyte(multiaddr, len);
1283 0 2 if (len != sizeof(mreq.imr_multiaddr))
1289 1 1 if(SvOK(interface)) {
1 0 if(SvOK(interface)) {
0 1 if(SvOK(interface)) {
1290 0 1 if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
0 0 if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
0 0 if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
1292 1 0 interfacebytes = SvPVbyte(interface, len);
1293 0 1 if (len != sizeof(mreq.imr_interface))
1315 2 0 char * mreqbytes = SvPVbyte(mreq_sv, mreqlen);
1316 0 2 if (mreqlen != sizeof(mreq))
1321 0 2 EXTEND(SP, 2);
1342 0 1 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
0 0 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
0 0 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
1344 1 0 multiaddrbytes = SvPVbyte(multiaddr, len);
1345 0 1 if (len != sizeof(mreq.imr_multiaddr))
1349 0 1 if (DO_UTF8(source) && !sv_utf8_downgrade(source, 1))
0 0 if (DO_UTF8(source) && !sv_utf8_downgrade(source, 1))
0 0 if (DO_UTF8(source) && !sv_utf8_downgrade(source, 1))
1351 0 1 if (len != sizeof(mreq.imr_sourceaddr))
1355 1 0 sourcebytes = SvPVbyte(source, len);
1359 0 1 if(SvOK(interface)) {
0 0 if(SvOK(interface)) {
0 0 if(SvOK(interface)) {
1360 0 1 if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
0 0 if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
0 0 if (DO_UTF8(interface) && !sv_utf8_downgrade(interface, 1))
1362 1 0 interfacebytes = SvPVbyte(interface, len);
1363 0 1 if (len != sizeof(mreq.imr_interface))
1387 1 0 char * mreqbytes = SvPVbyte(mreq_sv, mreqlen);
1388 0 1 if (mreqlen != sizeof(mreq))
1393 0 1 EXTEND(SP, 3);
1413 0 1 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
0 0 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
0 0 if (DO_UTF8(multiaddr) && !sv_utf8_downgrade(multiaddr, 1))
1415 1 0 multiaddrbytes = SvPVbyte(multiaddr, len);
1416 0 1 if (len != sizeof(mreq.ipv6mr_multiaddr))
1439 1 0 char * mreqbytes = SvPVbyte(mreq_sv, mreqlen);
1440 0 1 if (mreqlen != sizeof(mreq))
1445 0 1 EXTEND(SP, 2);