send()因ENOBUFS错误而失败

时间:2018-08-27 08:26:31

标签: c sockets posix

我有一个过程可以创建一个用于处理某些任务的新子过程。主进程还创建了一个子线程,用于一个特定任务。这些进程和线程通过 UNIX域套接字进行通信。

由于某种原因,子进程被卡住,并保持umtx状态。因此,每当主进程尝试向仍处于等待状态并等待子进程退出的子线程发送一些数据时,都不会响应。

最终,父套接字的tx队列继续累积消息并变满。这导致send()失败,并出现ENOBUFS错误。

我该如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

我该如何克服这个问题?

找出子进程卡住的原因并防止这种情况的发生,然后套接字队列将无法运行满。这是整个问题的原因,不是吗?

您还想如何克服它?给IPC套接字一个巨大的缓冲区只会使其积累更多的数据,但最终它将失败。因此,这将无法解决任何问题,只会延迟问题。

也可以以有意义的方式处理错误,例如尝试在一段时间后再次发送消息,如果再次失败,则终止子进程。这样,当子进程失败时,主进程可以恢复。

最后但并非最不重要的一点:您不应将UNIX套接字用于线程间通信。它旨在用于进程间通信。除非您出于测试目的而使用它,否则线程间使用它会产生不良影响,并且强烈建议不要使用它。