gpt4 book ai didi

c - UNIX 域套接字 (PF_UNIX) 上的 send() 失败并出现 ENOBUFS 错误

转载 作者:行者123 更新时间:2023-12-03 12:08:22 26 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

1年前关闭。




Improve this question




我有一个进程,它创建一个新的子进程来处理某些任务。主进程还创建了一个子线程,用于一项特定任务。这些进程和线程通过 进行通信UNIX 域套接字 .
由于某种原因,子进程卡住了,它仍然处于 umtx 状态。因此,每当主进程尝试向仍处于等待状态并等待子进程退出的子线程发送一些数据时,都不会响应。
最终,父套接字的 tx 队列不断积累消息并变满。这导致 send()失败 ENOBUFS错误。
我该如何克服这个问题?

最佳答案

How can I overcome this issue?


找出您的子进程卡住的原因并防止这种情况发生,然后套接字队列将不会运行满。这是你整个问题的原因,不是吗?
您还想如何克服它?给 IPC 套接字一个巨大的缓冲区只会让它积累更多的数据,但最终它会以同样的方式失败。所以这不会解决任何问题,只会延迟问题。
还要以有意义的方式处理错误,例如尝试在一段时间后再次发送消息,如果再次失败,则终止子进程。这样,当您的子进程失败时,您的主进程至少可以恢复。
最后但同样重要的是:您不应该使用 UNIX 套接字进行线程间通信。它旨在用于进程间通信。在线程间使用它可能会产生不良影响,强烈建议不要这样做,除非您这样做是出于测试目的。

关于c - UNIX 域套接字 (PF_UNIX) 上的 send() 失败并出现 ENOBUFS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52035331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com