首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果接收器无法通过套接字处理数据速度,会发生什么情况?

如果接收器无法通过套接字处理数据速度,会发生什么情况?
EN

Unix & Linux用户
提问于 2020-08-10 04:00:40
回答 1查看 452关注 0票数 0

我有两个进程P1 (发送者)和P2 (接收者)。P1使用unix-domain-socket (UDS)向P2发送数据。如果P1以每秒100条消息的速度发送数据,而P2能够接收50条消息/秒,会发生什么?两者都是非阻塞套接字。

在上述情况下发生了什么?p1或p2会在一段时间后面临内存耗尽吗?

团队,请解释在上面的场景下会发生什么。

谢谢。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-08-10 04:15:13

如果接收方没有发送者发送的读取速度快,那么套接字缓冲区会在一段时间后被填满。

假设数据报套接字类型为数据报套接字类型时,如果缓冲区已满,阻塞套接字将阻塞,从而隐式地减慢发送方的速度。使用非阻塞套接字,消息的发送就会失败,EAGAIN将由send作为错误返回。注意,这仅适用于类型为数据报的unix域套接字。有了UDP套接字,发送就会成功,消息就会丢失。

使用流套接字,无论套接字是阻塞还是非阻塞,都可能写入部分消息。发送方需要检查实际写入的字节数(返回send),并确保稍后发送剩余的数据。使用非阻塞套接字,send也可能在EAGAIN中完全失败,使用阻塞套接字,它将阻塞并等待接收方读取某些数据,以便在套接字缓冲区中再次有空间。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/603717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档