问题表现
程序“重启”的时候偶发性失败,表现在udp connect失败,但是如果成功启动,则程序运行完全正常。
失败时出现coredump,表现为断言失败:
(gdb) bt
#0 0x00007ff031e28f45 in raise () from/lib64/libc.so.6
#1 0x00007ff031e2a340 in abort () from/lib64/libc.so.6
#2 0x00007ff031e22486 in __assert_fail () from/lib64/libc.so.6
#3 0x0000000000418e0b indmp::detec::DnsResolver::NewSock (this=0x43cb5aa0, dns_addr_idx=0) atsrc/detec_dns_resolver.cpp:129
对应的代码(detec_dns_resolver.cpp:129):
assert(connect(fd,(sockaddr*)_dnsinfo[dns_addr_idx]._dns_addr, sizeof(sockaddr_in)) == 0);
注:如果一个udpsocket要反复使用,可以先执行connect将端口先绑定好,然后像调用tcp socket一样调用send、recv,而不用每次调用都重新(分配)绑定端口,从而提高程序性能。
问题分析
正常情况下,udp connect可以马上成功,如果失败的话,基本可以确定是connect要连接的地址有问题,于是从