移植libnoPoll到SylixOS遇到的問題總結-創(chuàng)新互聯(lián)

1.概述
關于libnoPoll移植到SylixOS的移植過程及移植方法參考工程技術筆記《移植libnopoll到SylixOS技術筆記》。本篇文檔旨在描述移植過程遇到的問題及解決問題的方法。

創(chuàng)新互聯(lián)建站專注于香坊網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經驗。 熱誠為您提供香坊營銷型網(wǎng)站建設,香坊網(wǎng)站制作、香坊網(wǎng)頁設計、香坊網(wǎng)站官網(wǎng)定制、小程序設計服務,打造香坊網(wǎng)絡公司原創(chuàng)品牌,更為您提供香坊網(wǎng)站排名全網(wǎng)營銷落地服務。

2、問題描述及解決方法
2.1 編譯提示未定義選項
在完成libnoPoll庫工程的創(chuàng)建后,在編譯時提示“'SO_BINDTODEVICE'undeclared (first use in this function)”,經過查閱資料得知‘SO_BINDTODEVICE’是一個套接字選項,該選項用于將套接口綁定到指定的網(wǎng)絡接口上。一般用于實現(xiàn)多網(wǎng)口負載均衡的方法。通常調用setsockopt接口對某個套接口進行套接字選項的設置。
在SylixOS中setsockopt函數(shù)原型如下所示。

#include <sys/socket.h>
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

函數(shù)setsockopt原型分析:
此函數(shù)成功時返回0,失敗時返回-1并設置錯誤號;
參數(shù)s是套接字(socket函數(shù)返回);
參數(shù)level是選項等級如下表 所示;
參數(shù)optname是選項名如下表所示;
參數(shù)optval是選項值;
參數(shù)optlen是選項長度。
通過調用setsockopt函數(shù)來設置不同選項等級的不同選項,參數(shù)optval是一個指向變量的指針類型,根據(jù)不同的選項,類型也不同。
移植libnoPoll到SylixOS遇到的問題總結
在libnoPoll中的調用如下所示。

setsockopt (socket, SOL_SOCKET, SO_BINDTODEVICE, options->_interface, strlen (options->_interface));

對于'SO_BINDTODEVICE'套接字選項,在Linux的man手冊中,有如下三點結論:

  • 對于TCP套接口、UDP套接口、RAW套接口,可以通過SO_BINDTODEVICE套接口選項將套接口綁定到指定的網(wǎng)絡接口上。綁定之后,套接口的所有數(shù)據(jù)包收發(fā)都只經過指定的網(wǎng)絡接口。
  • 對于PACKET類型的套接口,不能通過SO_BINDTODEVICE綁定到指定的網(wǎng)絡接口上,而要通過bind接口來與特定的網(wǎng)絡接口綁定,所用的套接口地址結構為struct sockaddr_ll,此套接口地址結構是鏈路層的地址結構,獨立于具體的網(wǎng)絡設備。比如,該地址結構既可以用于表示PPP設備,也能用于表示Ethernet設備。
  • SO_BINDTODEVICE套接口選項只適用于Linux系統(tǒng)。如果要編寫運行在多操作系統(tǒng)平臺上的程序,不能依賴SO_BINDTODEVICE來完成套接口與具體設備的綁定。
    通過閱讀SylixOS的源碼并由第三點結論可知,在SylixOS下并沒有提供該套接字選項,在沒有指定該套接字選項的情況下,每次在發(fā)送數(shù)據(jù)包之前,內核會先查找路由表從而決定從哪個網(wǎng)絡接口上發(fā)送數(shù)據(jù)包。因此,為了能夠保證工程能夠正確編譯,需要將該套接口選項剪裁掉。剪裁后的libnoPoll將不再具有實現(xiàn)多網(wǎng)口負載均衡的功能。

2.2 測試用例運行時出錯
在libnoPoll的測試代碼中會使用system函數(shù)來運行某些shell命令,但有些shell命令在SylixOS下并不支持或支持相同功能但shell命令名不同,因此,在測試代碼運行過程中有可能會出錯,遇到這種情況,可根據(jù)具體情況修改libnoPoll中提供的測試代碼。
在RealEvo IDE的base工程中,默認會有l(wèi)ibcextern(SylixOS C庫)和libsylixos(SylixOS內核組件)這兩個工程文件夾,在編譯base工程后會生成C庫文件和內核庫文件。在測試用例運行失敗后,通過跟蹤源代碼,發(fā)現(xiàn)在C庫和內核庫中都同時定義了getaddrinfo接口。默認情況下,在應用程序沒有指定引用哪個庫文件時,編譯時會使用內核庫中定義的函數(shù)。在工程屬性中可以重新設置引用的庫文件,通過將應用程序重新指定使用C庫之后,重新編譯應用程序,再次部署就能夠正常運行。

2.3 總結
由于大多數(shù)移植的中間件是從Linux下的工程移植過來的,因此,對于SylixOS不支持的特性,通常做法是看SylixOS有沒有可替換的方案,如果沒有的話,現(xiàn)階段是以裁剪為主。刪去不必要的功能。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章名稱:移植libnoPoll到SylixOS遇到的問題總結-創(chuàng)新互聯(lián)
標題鏈接:http://bm7419.com/article24/dsdece.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、網(wǎng)站建設網(wǎng)站內鏈、移動網(wǎng)站建設企業(yè)網(wǎng)站制作、網(wǎng)頁設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設計公司