mediaios / net-diagnosis

ios平台网络诊断SDK,支持对ip和域名的ping,traceroute(udp,icmp协议),支持tcp ping, 端口扫描,nslookup,局域网活跃ip扫描等功能-----------Ios platform network diagnostic SDK, support ip and domain name ping, traceroute (udp, icmp protocol), support tcp ping, port scan, nslookup, LAN active ip scan and other functions
MIT License
555 stars 132 forks source link

tcping功能异常 #10

Open paradiseduo opened 4 years ago

paradiseduo commented 4 years ago

例如: 我设置了重复10次,但是如果在第n次connect失败,那么就不会执行剩下的10-n次了。

那这样的话计算failed次数就没有意义了,因为一旦有一个failed后面的都不会再执行。

我看其他语言实现的tcping都是可以断掉之后继续的,像这样:

success 10ms
success 11ms
failed
success 9ms
failed
success 12ms

finish test, total 6 times, success 4 times, failed 2 times.

但是目前该程序实现的是这样:

success 10ms
failed
然后就停了。。

这种情况常见于去连接一个国外延迟不稳定的IP

目前看下来问题主要是出在这里:

    sigset(SIGALRM, tcp_conn_handler);
    alarm(1);
    int conn_res = connect(self->sock, (struct sockaddr *)addr, sizeof(struct sockaddr));
    alarm(0);
    sigrelse(SIGALRM);
mediaios commented 3 years ago

@paradiseduo 是的,就是你发的那个地方的原因导致的。不过上面代码起初是串行方式执行,失败了就不会接着执行了,不像icmp ping有丢包率的计算。不过你的建议非常好, 我这边改成你说的那样。感谢