2015-12-13 56 views
0

我想發送短信的海量對象在UDP上我自己的定義my_message的:在一個UDP消息中發送兩個數據塊而不復制塊?

class my_message 
{ 
    private: 
     // Message header 
     header_type header; 

     // Message text 
     byte * data; 
    public: 
     ... 
} 

但是,如果我把這個類的一個實例,頭部會沿着側指針(不是真正的發數據)。所以,簡單的想法是在發送它們之前將頭部和數據複製到緩衝區中。如您所知,UDP在消息而不是流上操作,這意味着sendto()recvfrom()之間存在一對一的關係。即這是不可能的sendto()兩次,並在一個recvfrom()接收數據。

我的問題:將數據複製到新的緩衝區會降低我的應用程序的效率。

人們會想到將發送分爲發送頭和發送數據。這將不起作用,因爲UDP消息在接收時沒有排序。

我的問題:有沒有辦法通過從兩個不同的來源閱讀消息來告訴應用程序sendto()

回答

2

sendmsg需要一個iov,它允許您通過iov(IO-Vector)結構指定來自不同位置的數據發送到一個數據包中。

這可能是你在找什麼。

+1

是否存在阻止您閱讀sendmsg()的手冊頁的問題,該頁面中有您自己使用sendmsg()的示例?你的英語看起來不錯,那麼爲什麼你想等一個人向你解釋你可以從sendmsg()的手冊頁上看到的同樣的東西? –

+1

如果sendmsg()的文檔中有某些不清楚的地方,那麼你當然可以問一個關於它的具體問題。您是否知道這個稱爲「www.google.com」的神奇網站,您可以在其中輸入「sendmsg示例」,並獲得數百個示例的鏈接。我在這裏閱讀的一半問題可以通過簡單的谷歌搜索來回答,這真的很有趣。 –

+0

您也可以使用'writev()'來達到此目的。 – EJP

相關問題