复现
第一次运行test_lo时,可以用curl唤醒(或者你在recv_from里手动poll_ifaces一下也可以)。
但之后再运行test_lo会睡死,且无法被curl啥的唤醒
@Samuka007 瞅瞅?
找到问题了,没给 UDP 实现 close 笑死
实现了就好了,晚点pr
第一次要curl的原因是,需要Arp后存 ethernet cache,参考他自己的测试程序,他cache lookup的时候poll也返回了个None,问题就在这里,他这里返回None后是loop的,不是像我们协议里那样直接睡眠等中断。
[0.000s] (iface::socket_set): [0]: adding
[0.000s] (iface::socket_set): [1]: adding
[0.000s] (loopback): listening
[0.000s] (socket::tcp): state=CLOSED=>LISTEN
[0.000s] (loopback): connecting
[0.000s] (socket::tcp): state=CLOSED=>SYN-SENT
[0.000s] (loopback): resuming
[0.000s] (socket::tcp): outgoing segment will send data or flags
[0.000s] (socket::tcp): sending SYN
[0.000s] (iface::interface): address 127.0.0.1 not in neighbor cache, sending ARP request
[0.000s] -> EthernetII src=02-00-00-00-00-01 dst=ff-ff-ff-ff-ff-ff type=ARP
\ ARP type=Ethernet+IPv4 src=02-00-00-00-00-01/127.0.0.1 tgt=ff-ff-ff-ff-ff-ff/127.0.0.1 op=Request
[0.000s] (iface::socket_meta): #1: neighbor 127.0.0.1 missing, silencing until t+1.000s
[0.000s] (loopback): sleeping for 1.000s ms
[1.000s] <- EthernetII src=02-00-00-00-00-01 dst=ff-ff-ff-ff-ff-ff type=ARP
\ ARP type=Ethernet+IPv4 src=02-00-00-00-00-01/127.0.0.1 tgt=ff-ff-ff-ff-ff-ff/127.0.0.1 op=Request
[1.000s] (iface::neighbor): filled 127.0.0.1 => 02-00-00-00-00-01 (was empty)
[1.000s] -> EthernetII src=02-00-00-00-00-01 dst=02-00-00-00-00-01 type=ARP
\ ARP type=Ethernet+IPv4 src=02-00-00-00-00-01/127.0.0.1 tgt=02-00-00-00-00-01/127.0.0.1 op=Reply
[1.000s] <- EthernetII src=02-00-00-00-00-01 dst=02-00-00-00-00-01 type=ARP
\ ARP type=Ethernet+IPv4 src=02-00-00-00-00-01/127.0.0.1 tgt=02-00-00-00-00-01/127.0.0.1 op=Reply
[1.000s] (iface::socket_meta): #1: neighbor 127.0.0.1 discovered, unsilencing
[1.000s] (socket::tcp): outgoing segment will send data or flags
既然如此我直接用 Medium::Ip 了,自己寻址去吧hhh
测试结果是秒回
具体 Medium::Ip 是跳过了哪些处理部分还没研究,但是嘛现在看起来跑的挺好hhh