2011-07-29 53 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。 - 非常感激 :) –