域通信中数据报方式发送失败的原因分析

本文分析了在域通信中使用Unix Domain Socket进行数据报方式发送时遇到的‘Resource temporarily unavailable’错误。问题源于发送缓冲区大小、系统参数max_dgram_qlen的限制,以及大消息连续发送。调整max_dgram_qlen和优化消息发送频率能有效避免该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解码器在使用过程中,开机容易出现 ztebw vplayer 发送控制命令失败,时常返回 Resource temporarily unavailable 错误,导致一些关键的命令没有办法发送成功,造成字幕叠加不正确或者播放不成功,给使用带来一些不便。在解码器中, ztebw vplayer 分别以进程形式存在,使用高效的 Unix Domain Socket 通信,用非阻塞模式。由于解码器同时支持 8 路视频点播,每一路视频播放都通过同一 Unix Domain Socket 发送,造成网络阻塞发送不成功,也不是没有有可能的。那原因究竟在哪呢?

先看看 Unix Domain Socket 这种 Socket 。按照网上的说法, UNIX Domain Socket 用于 IPC 更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。而且 UNIX Domain Socket 是全双工的, API 接口语义丰富,相比其它 IPC 机制有明显的优越性,目前已成为使用最广泛的 IPC 机制,比如 X Window 服务器和 GUI 程序之间就是通过 UNIX Domain Socket 通讯的。

有了这样的高帽,我们只能先把焦点放在应用上了。仔细分析启动过程中的消息发送过程。发现

这个过程本身是没有错的,但是解码器考虑到 vplayer 可能会中途退出重启,会主动通知 ztebw 进程,告诉 ztebw 自己已经启动了,会不断发送

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值