Sendto Failed C ++ // POSIX.4

时间:2011-07-29 16:42:37

标签: c++ sockets posix

所以 - 我正在运行一个应用程序,其中两个进程通过UNIX域套接字进行通信。通过套接字传递的绝大多数消息都被正确处理,但是当消息中的字节数超出某个限制时,我开始收到错误:

sendto failed: Message too long (POSIX.f)

我理解它告诉我的是什么。我无法更改消息长度,也不特别想花时间分段消息 - 而且它们都在同一台计算机上,所以我不必限制消息长度超过这个域套接字。

有没有办法可以增加可写入域套接字的内存量,或者在套接字初始化/ sendto / recvfrom调用中可能出现了哪些错误?我使用的send / recv缓冲区非常大(明显大于导致错误的消息)。

1 个答案:

答案 0 :(得分:3)

您使用的是流式传输还是数据报套接字?如果它们是流套接字,您只需执行第二次或第三次写入即可发送其余数据。如果它们是数据报套接字,你可能会被卡住(也许你可以切换到流套接字?)但是可能有一个setsockopt选项会增加限制。您可能还需要为不能增加限制的情况做好准备。基本上你的问题是内核需要负责在无限期的时间内保留一个潜在的大数据单元,这很容易导致资源耗尽和DoS,所以内核(出于很好的理由)限制了它将为您保留的数据量。