Linux RPC編程的幾點體會

來源:互聯網
上載者:User

轉自:http://blog.chinaunix.net/space.php?uid=20644632&do=blog&id=2220585

Linux下面的RPC模型是SUN RPC (ONC RPC),使用了XDR來編碼/解碼資料。gcc提供了一些標準資料類型的XDR filter(比如整型,浮點型,字串等)。對於自訂資料類型,則需要自己編寫XDR filter來處理。

你可以使用rpcgen來幫你自動產生xdr filter,但是,該工具需要你提供一個 .x 檔案。我在實際使用的過程中,遇到了一些問題,解決問題的過程中有了一些體會。

(1) xdr_string 無法處理C++的string類型,XDR裡面的string都是C style的,這點需要注意。

(2) 在C裡面,指標可以用來訪問數組,但是,在XDR中則不能簡單的混為一談。比如:
有一個資料結構st:

  1. struct st {
  2.     int a;
  3.     int b;
  4. };
  5. struct xxx {
  6.     struct st *buf;
  7.     int c;
  8. };

通過rpcgen產生的 XDR filter 中使用 xdr_pointer,xxx.buf 只能傳遞一個struct st。如果想要傳遞一個 struct st 數組,則需要使用 xdr_array(可變size的數組)或 xdr_vector (固定size的數組,與 C++ 標準庫裡面的vector不是一個概念!),.x檔案的寫法有些不一樣!

(3) 我曾經遇到了一個問題,XDR filter 直接返回失敗!通過clnt_perrno得到的錯誤資訊是:Can't encode arguments! 花了很多時間才發現,是因為給資料結構裡面的一個string(char *)類型的成員傳遞了空值,導致xdr_string總是失敗!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.