ZLMediaKit/ZLToolKit

test_udpSock 在windows vs2019编译运行时候,报错 address family not supported

TianXingZhang opened this issue · 3 comments

2022-07-23 18:01:20.324 W test_udpSock.exe[14980-16448] Socket.cpp:695 flushData | send udp socket[844] failed, data ignored:address family not supported
回退到2022-3-26 日的版本,没有这个问题

这个bug的原因是创建udp发送socket 没指定使用ipv4的网卡地址,导致创建了ipv6的socket;但是发送目标地址用的又是ipv4的127.0.0.1;修复方法就是创建socket时指定为ipv4即可;
另外也可以把目标地址改成::1(ipv6)

这是另外一种修改方式:

Index: tests/test_udpSock.cpp
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/tests/test_udpSock.cpp b/tests/test_udpSock.cpp
--- a/tests/test_udpSock.cpp	(revision 21993b0690d70fd1e2dc01f681072ca3df0c9061)
+++ b/tests/test_udpSock.cpp	(date 1658720726153)
@@ -40,7 +40,7 @@
     Socket::Ptr sockRecv = Socket::createSocket();//创建一个UDP数据接收端口
     Socket::Ptr sockSend = Socket::createSocket();//创建一个UDP数据发送端口
     sockRecv->bindUdpSock(9001);//接收UDP绑定9001端口
-    sockSend->bindUdpSock(0, "0.0.0.0");//发送UDP随机端口
+    sockSend->bindUdpSock(0);//发送UDP随机端口
 
     sockRecv->setOnRead([](const Buffer::Ptr &buf, struct sockaddr *addr , int){
         //接收到数据回调
@@ -48,7 +48,7 @@
     });
 
     struct sockaddr_storage addrDst;
-    makeAddr(&addrDst,"127.0.0.1",9001);//UDP数据发送地址
+    makeAddr(&addrDst,"::1",9001);//UDP数据发送地址
 //	sockSend->bindPeerAddr(&addrDst);
     int i = 0;
     while(!exitProgram){

非常感谢 @xia-chu