小弟最近需要处理一个 bug,没有思路,想咨询下大家
问题可以抽象为:同一 Linux 主机的两个进程,使用 AF LOCAL 的 UDP socket 互相发送消息,但是发送快到一定程度几 s 后,两个进程就都会卡住,重启 A 后工作正常。
根据日志和定位,情况是进程 A 执行到 sendto 后卡住,B 如果准备向 A 发消息,就也会在 sendto 函数里出不来,然后串口就安静了。
看起来很像是两个进程的缓冲区都满了,同时等待对方接收,形成死锁。但是我记得 UDP 没有发缓冲区,如果接收方的收缓冲区满了,发送方应该也不会管,而是任接收方丢弃,为什么会陷在函数里出不来呢?
有没有一些查找问题根源的思路
1
XiaoxiaoPu 2021-02-10 10:36:06 +08:00
AF_UNIX ( AF_LOCAL ) SOCK_DGRAM 并不是 UDP,它是可靠的。
|
2
undef404 2021-02-10 10:36:27 +08:00
udp send 有缓冲的.
可以改成 non_block 模式, 如果 buffer 满了就先别发. |
3
back0893 2021-02-10 13:41:36 +08:00 via iPhone
emm
udp 不是缓存满了就自动丢弃么 |
4
Meltdown 2021-02-10 16:03:05 +08:00 via Android
到底是 UDP 还是 UNIX 域套接字
|