2011-07-29 55 views
1

所以 - 我正在运行一个应用程序,其中两个进程正在通过UNIX域套接字进行通信。绝大多数的消息的传递在插座正确处理,但是当字节的信息的数量excedes一定的极限,我开始得到的错误:Sendto Failed C++ // POSIX.4

sendto failed: Message too long (POSIX.f) 

我明白了告诉我。我不能改变消息长度,也不特别想花费时间对消息进行分段 - 而且它们都在同一台计算机上,所以我不必限制消息长度在这个域套接字上。

有没有一种方法可以让我增加内存写入量域套接字,或者是有什么我可以在套接字初始化的工作失误,将已经实行了限制/ SENDTO/recvfrom的电话?我使用的send/recv缓冲区非常大(比导致错误的消息大得多)。

回答

3

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

+0

这是数据报套接字,这几乎是我想要得出的结论 - 但切换到流套接字是一个好主意。不过我会先检查setsockopt。 - 非常感激 :) –