内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

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

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

2、問題描述及解決方法
2.1 編譯提示未定義選項(xiàng)
在完成libnoPoll庫工程的創(chuàng)建后,在編譯時(shí)提示“'SO_BINDTODEVICE'undeclared (first use in this function)”,經(jīng)過查閱資料得知‘SO_BINDTODEVICE’是一個(gè)套接字選項(xiàng),該選項(xiàng)用于將套接口綁定到指定的網(wǎng)絡(luò)接口上。一般用于實(shí)現(xiàn)多網(wǎng)口負(fù)載均衡的方法。通常調(diào)用setsockopt接口對某個(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)長度。
通過調(diào)用setsockopt函數(shù)來設(shè)置不同選項(xiàng)等級(jí)的不同選項(xiàng),參數(shù)optval是一個(gè)指向變量的指針類型,根據(jù)不同的選項(xiàng),類型也不同。
移植libnoPoll到SylixOS遇到的問題總結(jié)
在libnoPoll中的調(diào)用如下所示。

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

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

  • 對于TCP套接口、UDP套接口、RAW套接口,可以通過SO_BINDTODEVICE套接口選項(xiàng)將套接口綁定到指定的網(wǎng)絡(luò)接口上。綁定之后,套接口的所有數(shù)據(jù)包收發(fā)都只經(jīng)過指定的網(wǎng)絡(luò)接口。
  • 對于PACKET類型的套接口,不能通過SO_BINDTODEVICE綁定到指定的網(wǎng)絡(luò)接口上,而要通過bind接口來與特定的網(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)。如果要編寫運(yùn)行在多操作系統(tǒng)平臺(tái)上的程序,不能依賴SO_BINDTODEVICE來完成套接口與具體設(shè)備的綁定。
    通過閱讀SylixOS的源碼并由第三點(diǎn)結(jié)論可知,在SylixOS下并沒有提供該套接字選項(xiàng),在沒有指定該套接字選項(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 測試用例運(yùn)行時(shí)出錯(cuò)
在libnoPoll的測試代碼中會(huì)使用system函數(shù)來運(yùn)行某些shell命令,但有些shell命令在SylixOS下并不支持或支持相同功能但shell命令名不同,因此,在測試代碼運(yùn)行過程中有可能會(huì)出錯(cuò),遇到這種情況,可根據(jù)具體情況修改libnoPoll中提供的測試代碼。
在RealEvo IDE的base工程中,默認(rèn)會(huì)有l(wèi)ibcextern(SylixOS C庫)和libsylixos(SylixOS內(nèi)核組件)這兩個(gè)工程文件夾,在編譯base工程后會(huì)生成C庫文件和內(nèi)核庫文件。在測試用例運(yùn)行失敗后,通過跟蹤源代碼,發(fā)現(xiàn)在C庫和內(nèi)核庫中都同時(shí)定義了getaddrinfo接口。默認(rèn)情況下,在應(yīng)用程序沒有指定引用哪個(gè)庫文件時(shí),編譯時(shí)會(huì)使用內(nèi)核庫中定義的函數(shù)。在工程屬性中可以重新設(shè)置引用的庫文件,通過將應(yīng)用程序重新指定使用C庫之后,重新編譯應(yīng)用程序,再次部署就能夠正常運(yùn)行。

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

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

文章名稱:移植libnoPoll到SylixOS遇到的問題總結(jié)-創(chuàng)新互聯(lián)
標(biāo)題鏈接:http://m.rwnh.cn/article24/dsdece.html

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

廣告

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

成都網(wǎng)頁設(shè)計(jì)公司
龙南县| 开化县| 鹤岗市| 马公市| 苍梧县| 中江县| 宝应县| 洛南县| 富锦市| 宽甸| 泽库县| 饶阳县| 隆安县| 内乡县| 子洲县| 深圳市| 永善县| 榆树市| 宁晋县| 文山县| 沽源县| 盐亭县| 定州市| 察雅县| 呼玛县| 乐山市| 洪湖市| 仪陇县| 锡林浩特市| 永嘉县| 扎兰屯市| 靖远县| 郯城县| 金山区| 天长市| 临西县| 白河县| 平陆县| 松江区| 肥乡县| 孟州市|