成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

移植libnoPoll到SylixOS遇到的問(wèn)題總結(jié)

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

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括嘉魚(yú)網(wǎng)站建設(shè)、嘉魚(yú)網(wǎng)站制作、嘉魚(yú)網(wǎng)頁(yè)制作以及嘉魚(yú)網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,嘉魚(yú)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到嘉魚(yú)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

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

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

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

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

對(duì)于'SO_BINDTODEVICE'套接字選項(xiàng),在Linux的man手冊(cè)中,有如下三點(diǎn)結(jié)論:

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

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

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

當(dāng)前標(biāo)題:移植libnoPoll到SylixOS遇到的問(wèn)題總結(jié)
網(wǎng)站地址:http://jinyejixie.com/article44/iicjee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站、App開(kāi)發(fā)、小程序開(kāi)發(fā)

廣告

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

成都app開(kāi)發(fā)公司
鄂尔多斯市| 伽师县| 休宁县| 房产| 南川市| 格尔木市| 乾安县| 鄯善县| 格尔木市| 扬州市| 崇礼县| 外汇| 鹤壁市| 厦门市| 房产| 万宁市| 车险| 长武县| 连江县| 玉林市| 阳原县| 娄底市| 五寨县| 新田县| 中西区| 林口县| 铅山县| 烟台市| 崇阳县| 张家界市| 德保县| 黄冈市| 中方县| 望城县| 固镇县| 静乐县| 临潭县| 大足县| 永吉县| 西乌| 江口县|