專利名稱:一種協(xié)議棧運(yùn)行裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)信息處理及通信技術(shù),尤其涉及一種計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議棧的運(yùn)行裝置和方法。
背景技術(shù):
在計(jì)算機(jī)信息處理及通信領(lǐng)域,由于嵌入式操作系統(tǒng)不統(tǒng)一,例如目前通常采用的嵌入式操作系統(tǒng)有VxWorks、Unix、Linux等,因此軟件平臺(tái)有時(shí)會(huì)需要跨操作系統(tǒng)的移植操作,在跨操作系統(tǒng)的移植過(guò)程中常常需要做特殊的處理。例如當(dāng)軟件平臺(tái)從其它操作系統(tǒng)移植到Linux操作系統(tǒng)后,需要將相關(guān)協(xié)議棧業(yè)務(wù)移植到Linux網(wǎng)絡(luò)協(xié)議棧上。Linux操作系統(tǒng)自身分為兩部分,一部分為核心軟件,也稱作內(nèi)核空間,另一部分為普通應(yīng)用程序,這部分稱為用戶空間。但是,Linux操作系統(tǒng)的協(xié)議棧運(yùn)行在內(nèi)核空間,當(dāng)軟件平臺(tái)移植時(shí),將相關(guān)協(xié)議棧業(yè)務(wù)移植到Linux的處于內(nèi)核空間的協(xié)議棧上,導(dǎo)致這個(gè)軟件平臺(tái)的開(kāi)發(fā)、調(diào)試、維護(hù)難度很大,同時(shí)如果現(xiàn)有的業(yè)務(wù)是基于伯克利軟件套件(BSD, Berkeley SoftwareDistribution)操作系統(tǒng)協(xié)議棧的,業(yè)務(wù)模塊無(wú)法容易地在兩者之間移植。所以為了解決這個(gè)問(wèn)題,目前現(xiàn)有的方案通常是將協(xié)議棧運(yùn)行在Linux操作系統(tǒng)的用戶空間。但是,現(xiàn)有的方案中,所述協(xié)議棧運(yùn)行在應(yīng)用程序進(jìn)程的地址空間內(nèi),也就是說(shuō)每個(gè)應(yīng)用程序進(jìn)程中都會(huì)有一個(gè)協(xié)議棧,這樣就會(huì)有很多問(wèn)題首先,每個(gè)應(yīng)用程序進(jìn)程都存在協(xié)議棧,但是他們之間不能相互訪問(wèn),導(dǎo)致路由信息、套接字(socket)信息、TCP連接等信息無(wú)法共享。其次,類似系統(tǒng)調(diào)用的讀(read)、寫(write)、選擇(select)操作無(wú)法和這些協(xié)議棧交互,也就是說(shuō)這些協(xié)議棧不支持這些標(biāo)準(zhǔn)的函數(shù),兼容性不高。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種協(xié)議棧運(yùn)行裝置和方法,以提高協(xié)議棧的信息共享度和兼容性。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種協(xié)議棧運(yùn)行裝置,包括運(yùn)行在用戶空間的應(yīng)用程序進(jìn)程,還包括協(xié)議棧用戶進(jìn)程,用于協(xié)議棧獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中;套接字層協(xié)議代理模塊,在系統(tǒng)初始化時(shí)注冊(cè)于內(nèi)核空間,用于應(yīng)用程序進(jìn)程與協(xié)議棧用戶進(jìn)程間的通信。優(yōu)選的,所述套接字層協(xié)議代理模塊用于應(yīng)用程序進(jìn)程與協(xié)議棧用戶進(jìn)程間的通信具體是指,所述套接字層協(xié)議代理模塊用于將應(yīng)用程序進(jìn)程對(duì)應(yīng)某一協(xié)議的操作請(qǐng)求轉(zhuǎn)發(fā)到協(xié)議棧用戶進(jìn)程;并用于接收來(lái)自協(xié)議棧用戶進(jìn)程的所述操作請(qǐng)求處理結(jié)果或通知事件并進(jìn)行處理;其中,所述套接字層協(xié)議代理模塊通過(guò)標(biāo)準(zhǔn)套接字SOCKET函數(shù)接口或標(biāo)準(zhǔn) I/O函數(shù)接口與應(yīng)用程序進(jìn)程進(jìn)行通信,通過(guò)進(jìn)程間通信機(jī)制與所述協(xié)議棧用戶進(jìn)程進(jìn)行通信。優(yōu)選的,所述協(xié)議棧用戶進(jìn)程中具有與應(yīng)用程序進(jìn)程所調(diào)用的標(biāo)準(zhǔn)SOCKET函數(shù)接口對(duì)應(yīng)的SOCKET函數(shù)接口。一種協(xié)議棧運(yùn)行方法,協(xié)議棧用戶進(jìn)程獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中, 并在系統(tǒng)初始化時(shí),在內(nèi)核空間內(nèi)注冊(cè)套接字層協(xié)議代理模塊;應(yīng)用程序進(jìn)程和協(xié)議棧用戶進(jìn)程之間通過(guò)所述套接字層協(xié)議代理模塊進(jìn)行通信。優(yōu)選的,應(yīng)用程序進(jìn)程和協(xié)議棧用戶進(jìn)程之間通過(guò)所述套接字層協(xié)議代理模塊進(jìn)行通信的具體步驟如下A、應(yīng)用程序進(jìn)程調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求;B、所述函數(shù)接口觸發(fā)應(yīng)用程序進(jìn)程進(jìn)入內(nèi)核空間,并將所述操作請(qǐng)求交由套接字層協(xié)議代理模塊處理;C、所述套接字層協(xié)議代理模塊將所述操作請(qǐng)求封裝為請(qǐng)求消息,并通過(guò)進(jìn)程間通信消息傳遞給協(xié)議棧用戶進(jìn)程;D、所述協(xié)議棧用戶進(jìn)程對(duì)所述操作請(qǐng)求進(jìn)行處理,并通過(guò)進(jìn)程間通信消息返回處理結(jié)果給所述套接字層協(xié)議代理模塊;E、所述套接字層協(xié)議代理模塊將處理結(jié)果返回給應(yīng)用程序進(jìn)程。優(yōu)選的,所述步驟D中,所述協(xié)議棧用戶進(jìn)程在當(dāng)前條件不能滿足所述操作請(qǐng)求時(shí),在返回的處理結(jié)果中包括需要等待的信息;當(dāng)套接字層協(xié)議代理模塊收到的處理結(jié)果中包括需要等待信息時(shí),則暫時(shí)不封裝和返回處理結(jié)果給應(yīng)用程序進(jìn)程,而是阻塞應(yīng)用程序進(jìn)程等待通知事件;所述協(xié)議棧用戶進(jìn)程在當(dāng)前條件滿足所述操作請(qǐng)求時(shí),向所述套接字層協(xié)議代理模塊返回通知事件;所述套接字層協(xié)議代理模塊將該通知事件中對(duì)應(yīng)的應(yīng)用程序進(jìn)程喚醒。優(yōu)選的,所述步驟A中,在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,如是則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求, 所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符;否則執(zhí)行如下步驟All、應(yīng)用程序進(jìn)程向套接字層協(xié)議代理模塊請(qǐng)求創(chuàng)建全局文件描述符;A12、套接字層協(xié)議代理模塊通過(guò)進(jìn)程間通信機(jī)制發(fā)送文件描述符創(chuàng)建請(qǐng)求到所述協(xié)議棧用戶進(jìn)程;A13、所述協(xié)議棧用戶進(jìn)程根據(jù)文件描述符創(chuàng)建請(qǐng)求生成一個(gè)唯一的私有文件描述符,并將所述私有文件描述符返回給所述套接字層協(xié)議代理模塊;A14、套接字層協(xié)議代理模塊生成一個(gè)對(duì)應(yīng)的全局文件描述符并將該全局文件描述符和所述私有文件描述符綁定存儲(chǔ),返回該全局文件描述符給應(yīng)用程序進(jìn)程;之后執(zhí)行步驟A至步驟E,應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述私有文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊根據(jù)所保存的綁定關(guān)系,將所述私有文件描述符和所述全局文件描述符進(jìn)行轉(zhuǎn)換。優(yōu)選的,所述步驟A中,在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,如是則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)1/0函數(shù)接口發(fā)起操作請(qǐng)求, 所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符;否則執(zhí)行如下步驟A21、應(yīng)用程序進(jìn)程向套接字層協(xié)議代理模塊請(qǐng)求創(chuàng)建全局文件描述符;A22、套接字層協(xié)議代理模塊根據(jù)該文件描述符創(chuàng)建請(qǐng)求生成一個(gè)全局文件描述符;A23、套接字層協(xié)議代理模塊通過(guò)進(jìn)程間通信機(jī)制發(fā)送文件描述符創(chuàng)建請(qǐng)求和生成的全局文件描述符到所述協(xié)議棧用戶進(jìn)程;A24、所述協(xié)議棧用戶進(jìn)程根據(jù)收到的文件描述符創(chuàng)建請(qǐng)求生成對(duì)應(yīng)的唯一的私有文件描述符;并將該私有文件描述符和所述收到全局文件描述符綁定存儲(chǔ);套接字層協(xié)議代理模塊將全局文件描述符返回給應(yīng)用程序進(jìn)程;之后執(zhí)行步驟A至步驟E,應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述全局文件描述符標(biāo)識(shí)連接信息,協(xié)議棧用戶進(jìn)程根據(jù)所保存的綁定關(guān)系,將所述全局文件描述符和私有文件描述符進(jìn)行轉(zhuǎn)換,以私有文件描述符標(biāo)識(shí)連接信息。優(yōu)選的,所述步驟A中,在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,如是則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求, 所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符;否則執(zhí)行如下步驟A31、應(yīng)用程序進(jìn)程向套接字層協(xié)議代理模塊請(qǐng)求創(chuàng)建全局文件描述符;A32、套接字層協(xié)議代理模塊根據(jù)該文件描述符創(chuàng)建請(qǐng)求生成一個(gè)全局文件描述符;A33、套接字層協(xié)議代理模塊通過(guò)進(jìn)程間通信機(jī)制發(fā)送文件描述符創(chuàng)建請(qǐng)求和生成的全局文件描述符到所述協(xié)議棧用戶進(jìn)程;A34、所述協(xié)議棧用戶進(jìn)程根據(jù)文件描述符創(chuàng)建請(qǐng)求,將所述全局文件描述符傳入對(duì)應(yīng)的SOCKET函數(shù)接口中,并將該全局文件描述符保存在數(shù)據(jù)結(jié)構(gòu)中;所述套接字層協(xié)議代理模塊將全局文件描述符返回給應(yīng)用程序進(jìn)程;之后執(zhí)行步驟A至步驟E,應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述全局文件描述符標(biāo)識(shí)連接信息,協(xié)議棧用戶進(jìn)程中也用所傳入的全局文件描述符標(biāo)識(shí)連接信息。優(yōu)選的,該方法進(jìn)一步包括判斷應(yīng)用程序進(jìn)程采用的通信協(xié)議是否為所述協(xié)議棧支持且所述套接字層協(xié)議代理模塊注冊(cè)過(guò)的協(xié)議,如果是則利用所述套接字層協(xié)議代理模塊進(jìn)行通信;否則不利用所述套接字層協(xié)議代理模塊進(jìn)行通信。與現(xiàn)有技術(shù)相比,本發(fā)明將協(xié)議棧運(yùn)行在Linux操作系統(tǒng)的處于用戶空間的獨(dú)立用戶進(jìn)程之中,并通過(guò)在內(nèi)核空間注冊(cè)套接字層協(xié)議代理模塊,通過(guò)該套接字層協(xié)議代理模塊實(shí)現(xiàn)應(yīng)用程序與協(xié)議棧用戶進(jìn)程之間的通信。因此本發(fā)明可以使不同的應(yīng)用程序使用相同的協(xié)議棧進(jìn)程,可以解決路由信息、socket信息、TCP連接等信息無(wú)法共享的問(wèn)題,提高協(xié)議棧的信息共享度;另外,由于協(xié)議棧運(yùn)行在獨(dú)立進(jìn)程中,因此可以支持系統(tǒng)調(diào)用的操作,提高了協(xié)議棧的兼容性。由于本發(fā)明的協(xié)議棧運(yùn)行在用戶空間,因此能夠降低軟件平臺(tái)移植的調(diào)試、維護(hù)、 和開(kāi)發(fā)難度。由于協(xié)議棧用戶進(jìn)程獨(dú)立于應(yīng)用程序,因此協(xié)議棧出現(xiàn)故障后能夠單獨(dú)重新啟動(dòng),避免影響應(yīng)用程序和操作系統(tǒng)。進(jìn)一步的,本發(fā)明還利用內(nèi)核管理文件描述符(FD,F(xiàn)ile Desocketriptor),標(biāo)準(zhǔn)的I/O函數(shù)接口都可以操作該FD保證應(yīng)用程序不做修改,另外使用內(nèi)核管理FD之后,系統(tǒng)管理操作可以保持和前原有Linux操作系統(tǒng)的一致性,例如dup函數(shù)可以復(fù)制一個(gè)現(xiàn)存的 FD,該功能無(wú)需特殊修改即可支持。另外,本發(fā)明所述協(xié)議棧用戶進(jìn)程中具有與應(yīng)用程序所調(diào)用的標(biāo)準(zhǔn)SOCKET函數(shù)接口對(duì)應(yīng)的SOCKET函數(shù)接口,相當(dāng)于使用了雙層套接字層結(jié)構(gòu),避免對(duì)Linux原生套接字層的修改,也避免了對(duì)協(xié)議棧套接字層的修改。另外,本發(fā)明通過(guò)注冊(cè)操作,注冊(cè)協(xié)議棧支持的特定協(xié)議,并利用所述套接字層協(xié)議代理模塊對(duì)這些特定協(xié)議進(jìn)行通信,因此運(yùn)行在用戶空間獨(dú)立進(jìn)程中的協(xié)議棧和Linux原生的協(xié)議棧并存,不需要對(duì)Linux原有協(xié)議棧進(jìn)行修改。因此,綜上所述,采用本發(fā)明后,減少了對(duì)原有Linux操作系統(tǒng)及應(yīng)用程序的修改,進(jìn)一步降低軟件的調(diào)試、維護(hù)和開(kāi)發(fā)難度。另外,本發(fā)明還在應(yīng)用進(jìn)程和協(xié)議棧進(jìn)程之間采用共享內(nèi)存的方式提高效率。
圖1為本發(fā)明所述協(xié)議棧運(yùn)行的示意圖;圖2為本發(fā)明所述協(xié)議棧運(yùn)行裝置的另一示意圖;圖3為本發(fā)明所述方法創(chuàng)建socket的一種流程圖;圖4為本發(fā)明所述應(yīng)用程序發(fā)起請(qǐng)求操作以及接收通知事件的一種流程圖。
具體實(shí)施例方式下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說(shuō)明。圖1為本發(fā)明所述協(xié)議棧運(yùn)行裝置的一種示意圖。參見(jiàn)圖1,該協(xié)議棧運(yùn)行裝置包括協(xié)議棧用戶進(jìn)程101,用于協(xié)議棧獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中;套接字層協(xié)議代理模塊103,在系統(tǒng)初始化時(shí)注冊(cè)于內(nèi)核空間,用于應(yīng)用程序進(jìn)程與協(xié)議棧用戶進(jìn)程間的通信。套接字層協(xié)議代理模塊103,通過(guò)標(biāo)準(zhǔn)SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口 102 與應(yīng)用程序進(jìn)行通信,通過(guò)進(jìn)程間通信機(jī)制與所述協(xié)議棧用戶進(jìn)程101進(jìn)行通信。所述標(biāo)準(zhǔn)SOCKET函數(shù)接口或標(biāo)準(zhǔn)1/0函數(shù)接口 102,位于用戶空間且被應(yīng)用程序調(diào)用。所述套接字層協(xié)議代理模塊用于將應(yīng)用程序進(jìn)程對(duì)應(yīng)某一協(xié)議的操作請(qǐng)求轉(zhuǎn)發(fā)到協(xié)議棧用戶進(jìn)程;并用于接收來(lái)自協(xié)議棧用戶進(jìn)程的所述操作請(qǐng)求處理結(jié)果或通知事件并進(jìn)行處理。如圖1所示,所述協(xié)議棧用戶進(jìn)程101中具有與應(yīng)用程序進(jìn)程所調(diào)用的標(biāo)準(zhǔn) SOCKET函數(shù)接口對(duì)應(yīng)的SOCKET函數(shù)接口,相當(dāng)于使用了雙層套接字層結(jié)構(gòu),避免對(duì)Linux 原生套接字層架構(gòu)的修改,也避免了對(duì)用戶空間協(xié)議棧socket的修改。圖2為本發(fā)明所述協(xié)議棧運(yùn)行裝置的另一示意圖。如圖2所示,本發(fā)明所述套接字層協(xié)議代理模塊可以采用阻塞等待的方式處理協(xié)議棧用戶進(jìn)程101返回的處理結(jié)果,因此該裝置還進(jìn)一步包括發(fā)送通知模塊104,用于將協(xié)議棧用戶進(jìn)程的通知事件發(fā)送給所述套接字層協(xié)議代理模塊以喚醒阻塞隊(duì)列中阻塞進(jìn)程?;谒龅膮f(xié)議棧運(yùn)行裝置,本發(fā)明公布了一種協(xié)議棧運(yùn)行方法,協(xié)議棧用戶進(jìn)程獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中,并在內(nèi)核空間內(nèi)注冊(cè)套接字套接字層協(xié)議代理模塊,該注冊(cè)操作可以在操作系統(tǒng)初始化時(shí)進(jìn)行;應(yīng)用程序和協(xié)議棧用戶進(jìn)程之間通過(guò)所述套接字層協(xié)議代理模塊進(jìn)行通信,其中應(yīng)用程序和所述套接字層協(xié)議代理模塊之間通過(guò)標(biāo)準(zhǔn)SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口進(jìn)行通信,所述套接字層協(xié)議代理模塊和所述協(xié)議棧用戶進(jìn)程之間通過(guò)進(jìn)程間通信機(jī)制進(jìn)行通信,具體步驟如下A、應(yīng)用程序進(jìn)程調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求;B、所述函數(shù)接口觸發(fā)應(yīng)用程序進(jìn)程進(jìn)入內(nèi)核空間,并將所述操作請(qǐng)求交由套接字層協(xié)議代理模塊處理;C、所述套接字層協(xié)議代理模塊將所述操作請(qǐng)求封裝為請(qǐng)求消息,并通過(guò)進(jìn)程間通信消息傳遞給協(xié)議棧用戶進(jìn)程;D、所述協(xié)議棧用戶進(jìn)程對(duì)所述操作請(qǐng)求進(jìn)行處理,并通過(guò)進(jìn)程間通信消息返回處理結(jié)果給所述套接字層協(xié)議代理模塊;E、所述套接字層協(xié)議代理模塊將處理結(jié)果返回給應(yīng)用程序進(jìn)程。應(yīng)用程序如果需要通過(guò)協(xié)議棧與網(wǎng)絡(luò)上的其它應(yīng)用程序通信而發(fā)起操作請(qǐng)求時(shí), 首先判斷是否存在對(duì)應(yīng)的socket,更具體一點(diǎn)就是判斷是否存在全局文件描述符,如果存在則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求,所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符,否則需要請(qǐng)求創(chuàng)建socket。圖3為本發(fā)明所述方法創(chuàng)建socket的一種流程圖,參見(jiàn)圖3,該流程包括步驟301、應(yīng)用程序調(diào)用socket函數(shù)接口,向套接字層協(xié)議代理模塊發(fā)送用于創(chuàng)建socket的請(qǐng)求,即請(qǐng)求創(chuàng)建全局文件描述符。此處,為了實(shí)現(xiàn)本發(fā)明所述運(yùn)行在用戶空間獨(dú)立進(jìn)程中的協(xié)議棧和Linux原生的協(xié)議棧并存,可以進(jìn)一步在步驟301之前判斷應(yīng)用程序采用的通信協(xié)議是否為所述協(xié)議棧支持且所述套接字層協(xié)議代理模塊注冊(cè)過(guò)的協(xié)議,如果是則利用所述套接字層協(xié)議代理模塊進(jìn)行通信;否則不利用所述套接字層協(xié)議代理模塊進(jìn)行通信,而是利用現(xiàn)有的方法調(diào)用 Linux操作系統(tǒng)原生協(xié)議棧進(jìn)行通信。從而實(shí)現(xiàn)運(yùn)行在用戶空間獨(dú)立進(jìn)程中的協(xié)議棧和 Linux原生的協(xié)議棧并存,不需要對(duì)Linux原有協(xié)議棧進(jìn)行修改,降低了開(kāi)發(fā)、調(diào)試和維護(hù)難度。步驟302、創(chuàng)建socket的請(qǐng)求被套接字層協(xié)議代理模塊獲取,套接字層協(xié)議代理模塊創(chuàng)建協(xié)議相關(guān)管理結(jié)構(gòu)并且封裝創(chuàng)建socket的請(qǐng)求消息,并將該請(qǐng)求消息通過(guò)進(jìn)程間通信機(jī)制發(fā)送到協(xié)議棧用戶進(jìn)程進(jìn)行處理,此時(shí)套接字層協(xié)議代理模塊被阻塞等待結(jié)^ ο此處所述創(chuàng)建socket請(qǐng)求消息的內(nèi)容包括協(xié)議族(domain),用于指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,例如對(duì)于TCP/IP 協(xié)議族,該參數(shù)置AF_INET。類型(type),用于指定要?jiǎng)?chuàng)建的套接字類型。其中,流套接字類型為S0CK_ STREAM、數(shù)據(jù)報(bào)套接字類型為S0CK_DGRAM、原始套接字S0CK_RAW。協(xié)議號(hào)(protocol),用于指定應(yīng)用程序所使用的通信協(xié)議的協(xié)議號(hào)。步驟303 304、協(xié)議棧用戶進(jìn)程收到通過(guò)進(jìn)程間機(jī)制收到所述創(chuàng)建socket的請(qǐng)求消息后,進(jìn)行解封裝后,調(diào)用協(xié)議棧內(nèi)部對(duì)應(yīng)的socket函數(shù)接口創(chuàng)建socket,生成該 socket對(duì)應(yīng)的文件描述符,該文件描述符可命名為私有文件描述符,又由于該文件描述符僅僅在用戶空間的協(xié)議棧用戶進(jìn)程內(nèi)部使用,也可以稱之為內(nèi)部文件描述符,除此之外還需要?jiǎng)?chuàng)建協(xié)議控制塊(PCB)等必要信息;然后將所述私有文件描述符封成進(jìn)程間消息返回給套接字層協(xié)議代理模塊。所述私有文件描述符只要唯一即可,可以是整數(shù)、小數(shù)、字符串等。步驟305 306、套接字層協(xié)議代理模塊收到來(lái)自協(xié)議棧用戶進(jìn)程的響應(yīng)消息后被喚醒,將所述私有文件描述符保存在之前創(chuàng)建的一私有結(jié)構(gòu)中,同時(shí)生成一個(gè)全局文件描述符,并與所述私有文件描述符綁定存儲(chǔ)在所述私有結(jié)構(gòu)中,使得所述私有文件描述符和全局文件描述符具有映射關(guān)系。之后套接字層協(xié)議代理模塊將創(chuàng)建socket的結(jié)果返回給應(yīng)用程序,其中包括所述全局文件描述符。步驟307、應(yīng)用程序和協(xié)議棧用戶進(jìn)程利用所創(chuàng)建的socket進(jìn)行通信,即應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述私有文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊根據(jù)所保存的綁定關(guān)系,將所述私有文件描述符和所述全局文件描述符進(jìn)行轉(zhuǎn)換。通過(guò)上述流程,應(yīng)用程序得到的全局文件描述符和協(xié)議棧的私有文件描述符通過(guò)套接字層協(xié)議代理模塊的私有結(jié)構(gòu)形成一個(gè)對(duì)應(yīng)關(guān)系。利用這個(gè)對(duì)應(yīng)關(guān)系就可以方便的將全局文件描述符轉(zhuǎn)換成私有文件描述符,使用私有文件描述符在協(xié)議棧用戶進(jìn)程中進(jìn)行報(bào)文收發(fā)/控制操作;也可以將私有文件描述符轉(zhuǎn)化得到全局文件描述符,這樣套接字層協(xié)議代理模塊在收到協(xié)議棧用戶進(jìn)程通知的時(shí)候能夠找到對(duì)應(yīng)的應(yīng)用程序進(jìn)程進(jìn)行通知操作。在本發(fā)明的另一種實(shí)施例中,所述全局文件描述符也可以在步驟302中由套接字層協(xié)議模塊生成,并發(fā)送給協(xié)議棧用戶進(jìn)程,在協(xié)議棧用戶進(jìn)程中形成私有文件描述符和全局文件描述符之間的對(duì)應(yīng)關(guān)系,由協(xié)議棧用戶進(jìn)程進(jìn)行私有文件描述符和全局文件描述符之間的轉(zhuǎn)換。本發(fā)明中,所述全局文件描述符的生成位置和全局文件描述符與私有文件描述符對(duì)應(yīng)關(guān)系的存儲(chǔ)位置可以由本領(lǐng)域技術(shù)人員根據(jù)需要選擇是在套接字層協(xié)議代理模塊中還是在協(xié)議棧用戶進(jìn)程中。上述兩種生成私有文件描述符的實(shí)施例,由于全局文件描述符和私有文件描述符之間的轉(zhuǎn)換,因此協(xié)議棧用戶進(jìn)程中對(duì)應(yīng)的原生的SOCKET函數(shù)接口不必進(jìn)行修改,可以直接使用。另外,在另一種實(shí)施例中,也可以不必生成所述私有文件描述符,而是直接利用全局文件描述符同樣可以完成本發(fā)明的目的,該全局文件描述符在所述套接字層協(xié)議代理模塊生成后,在該實(shí)施例中需要修改協(xié)議棧用戶進(jìn)程中的SOCKET函數(shù)接口,如在SOCKET函數(shù)接口中不但傳入?yún)f(xié)議族(domain)、類型(type)、和協(xié)議號(hào)(protocol)等參數(shù),還要包括一全局文件描述符參數(shù)(globle-file-descriptor),接下來(lái)在整個(gè)連接信息的創(chuàng)建過(guò)程中, 在生成文件描述符部分還需要做修改,將傳入的所述全局文件描述符保存在數(shù)據(jù)結(jié)構(gòu)中, 并且返回該全局文件描述符。所述應(yīng)用程序進(jìn)程和協(xié)議棧用戶進(jìn)程之間利用所創(chuàng)建的全局的文件描述符及私有的文件描述符進(jìn)行通信,主要包括應(yīng)用程序主動(dòng)發(fā)起請(qǐng)求操作的流程以及協(xié)議棧發(fā)出通知操作的流程。
圖4為本發(fā)明所述應(yīng)用程序發(fā)起請(qǐng)求操作以及接收通知事件的一種流程圖。參見(jiàn)圖4,該流程包括步驟401、在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,由于上述圖3的流程已經(jīng)創(chuàng)建了 socket并返回了全局文件描述符,因此此處通過(guò)標(biāo)準(zhǔn)SOCKET函數(shù)接口或者標(biāo)準(zhǔn)I/O函數(shù)接口(例如read/write)發(fā)起操作請(qǐng)求,該操作請(qǐng)求中包括所創(chuàng)建socket的全局文件描述符,以該全局文件描述符標(biāo)識(shí)連接信息。所述函數(shù)接口調(diào)用會(huì)觸發(fā)應(yīng)用程序進(jìn)入內(nèi)核空間,并且將操作請(qǐng)求交由對(duì)應(yīng)的套接字層協(xié)議代理模塊處理。步驟402 403、套接字層協(xié)議代理模塊根據(jù)私有結(jié)構(gòu)中所保存的全局文件描述符和私有文件描述符之間的綁定關(guān)系,將操作請(qǐng)求中的所述全局文件描述符轉(zhuǎn)換為對(duì)應(yīng)的私有文件描述符,以該私有文件描述符標(biāo)識(shí)連接信息,將該操作請(qǐng)求封裝成操作請(qǐng)求消息, 通過(guò)進(jìn)程間通信機(jī)制將該操作請(qǐng)求消息傳遞給協(xié)議棧用戶進(jìn)程。此時(shí)套接字層協(xié)議代理模塊阻塞等待協(xié)議棧返回結(jié)果。在一種優(yōu)選實(shí)施方式中,為了提高效率,消息及其內(nèi)部封裝的數(shù)據(jù)可以使用共享內(nèi)存的方式進(jìn)行傳遞以減少內(nèi)存拷貝。步驟404、協(xié)議棧用戶進(jìn)程收到操作請(qǐng)求消息之后,將消息解封裝,根據(jù)其中的私有文件描述符將該操作請(qǐng)求交給對(duì)應(yīng)的處理流程進(jìn)行處理。此時(shí)的協(xié)議棧處理不能為阻塞方式,不管是否成功必須立刻將結(jié)果返回給套接字層協(xié)議代理模塊。步驟405、協(xié)議棧用戶進(jìn)程處理完請(qǐng)求之后封裝包括該私有文件描述符的處理結(jié)果,將該處理結(jié)果返回到所述套接字層協(xié)議代理模塊。步驟406 407、套接字層協(xié)議代理模塊收到返回的處理結(jié)果后,根據(jù)私有結(jié)構(gòu)中所保存的私有文件描述符和全局文件描述符的綁定關(guān)系,將該處理結(jié)果中的所述私有文件描述符轉(zhuǎn)換為對(duì)應(yīng)的全局文件描述符。之后根據(jù)具體情況進(jìn)行處理如果返回的是成功的處理結(jié)果,那么將處理結(jié)果返回給應(yīng)用程序;如果返回的是失敗的處理結(jié)果,那么設(shè)置錯(cuò)誤號(hào)之后將處理結(jié)果返回給應(yīng)用程序以表示處理失敗。在另一種情況中,如果所述協(xié)議棧用戶進(jìn)程在當(dāng)前條件不能滿足所述操作請(qǐng)求時(shí),在返回的處理結(jié)果中包括需要等待的信息。例如當(dāng)應(yīng)用程序調(diào)用recv函數(shù)接口發(fā)出期望接收數(shù)據(jù)的請(qǐng)求時(shí),所述協(xié)議棧用戶進(jìn)程收到請(qǐng)求后會(huì)判斷當(dāng)前條件下是否有數(shù)據(jù)可以返回,如果沒(méi)有數(shù)據(jù)則會(huì)返回需要等待的信息。因此,如果套接字層協(xié)議代理模塊收到的處理結(jié)果中包括需要等待的信息,則暫時(shí)不封裝和返回處理結(jié)果給應(yīng)用程序,而是將對(duì)應(yīng)的應(yīng)用程序進(jìn)程阻塞等待。具體處理步驟請(qǐng)參見(jiàn)以下步驟408 步驟411。步驟408、在需要等待的情況下,套接字層協(xié)議代理模塊將對(duì)應(yīng)的應(yīng)用程序進(jìn)程阻塞等待,等待協(xié)議棧用戶進(jìn)程的通知事件。步驟409 410、所述協(xié)議棧用戶進(jìn)程在當(dāng)前條件滿足所述操作請(qǐng)求時(shí),封裝包含所述私有文件描述符的通知事件,將該通知事件返回到所述套接字層協(xié)議代理模塊。例如, 當(dāng)?shù)讓咏邮盏綀?bào)文并送入?yún)f(xié)議棧進(jìn)程,如果判斷該報(bào)文為本機(jī)報(bào)文后則滿足所述recv函數(shù)接口請(qǐng)求,因此將報(bào)文送入套接字層的緩沖隊(duì)列,并且向套接字層協(xié)議代理模塊發(fā)送包含該私有文件描述符的通知事件,通知對(duì)應(yīng)的進(jìn)程喚醒。步驟411、所述套接字層協(xié)議代理模塊將收到的通知事件中的私有文件描述符轉(zhuǎn)換為對(duì)應(yīng)的全局文件描述符,喚醒對(duì)應(yīng)的應(yīng)用程序進(jìn)程,返回步驟403重新發(fā)送所述操作請(qǐng)求到所述協(xié)議棧用戶進(jìn)程,并繼續(xù)執(zhí)行后續(xù)步驟。即,繼續(xù)等待返回結(jié)果,如果返回的是成功的處理結(jié)果,那么該次請(qǐng)求成功;如果返回的是失敗的處理結(jié)果則向應(yīng)用程序返回錯(cuò)誤號(hào);如果仍然需要阻塞等待,那么繼續(xù)阻塞等待通知事件。在另一實(shí)施例中,如果所述全局文件描述符和私有文件描述符的對(duì)應(yīng)關(guān)系保存在所述協(xié)議棧用戶進(jìn)程中,則應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊直接將包含全局文件描述符的操作請(qǐng)求發(fā)送給協(xié)議棧用戶進(jìn)程,由協(xié)議棧用戶進(jìn)程根據(jù)所保存的綁定關(guān)系,將所述全局文件描述符和私有文件描述符進(jìn)行轉(zhuǎn)換,以私有文件描述符標(biāo)識(shí)連接信息,并且協(xié)議棧用戶進(jìn)程返回給套接字層協(xié)議代理模塊的處理結(jié)果中包括的是全局文件描述符。在另一實(shí)施例中,如果只使用全局文件描述符標(biāo)識(shí)連接信息,則應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述全局文件描述符標(biāo)識(shí)連接信息,協(xié)議棧用戶進(jìn)程中的 SOCKET函數(shù)接口以及下層協(xié)議也用所傳入的全局文件描述符標(biāo)識(shí)連接信息。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種協(xié)議棧運(yùn)行裝置,包括運(yùn)行在用戶空間的應(yīng)用程序進(jìn)程,其特征在于,還包括協(xié)議棧用戶進(jìn)程,用于協(xié)議棧獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中;套接字層協(xié)議代理模塊,在系統(tǒng)初始化時(shí)注冊(cè)于內(nèi)核空間,用于應(yīng)用程序進(jìn)程與協(xié)議棧用戶進(jìn)程間的通信。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于,所述套接字層協(xié)議代理模塊用于應(yīng)用程序進(jìn)程與協(xié)議棧用戶進(jìn)程間的通信具體是指,所述套接字層協(xié)議代理模塊用于將應(yīng)用程序進(jìn)程對(duì)應(yīng)某一協(xié)議的操作請(qǐng)求轉(zhuǎn)發(fā)到協(xié)議棧用戶進(jìn)程;并用于接收來(lái)自協(xié)議棧用戶進(jìn)程的所述操作請(qǐng)求處理結(jié)果或通知事件并進(jìn)行處理;其中,所述套接字層協(xié)議代理模塊通過(guò)標(biāo)準(zhǔn)套接字SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口與應(yīng)用程序進(jìn)程進(jìn)行通信,通過(guò)進(jìn)程間通信機(jī)制與所述協(xié)議棧用戶進(jìn)程進(jìn)行通信。
3.根據(jù)權(quán)利要求1或2所述的裝置,其特征在于,所述協(xié)議棧用戶進(jìn)程中具有與應(yīng)用程序進(jìn)程所調(diào)用的標(biāo)準(zhǔn)SOCKET函數(shù)接口對(duì)應(yīng)的SOCKET函數(shù)接口。
4.一種協(xié)議棧運(yùn)行方法,其特征在于,協(xié)議棧用戶進(jìn)程獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中,并在系統(tǒng)初始化時(shí),在內(nèi)核空間內(nèi)注冊(cè)套接字層協(xié)議代理模塊;應(yīng)用程序進(jìn)程和協(xié)議棧用戶進(jìn)程之間通過(guò)所述套接字層協(xié)議代理模塊進(jìn)行通信。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,應(yīng)用程序進(jìn)程和協(xié)議棧用戶進(jìn)程之間通過(guò)所述套接字層協(xié)議代理模塊進(jìn)行通信的具體步驟如下A、應(yīng)用程序進(jìn)程調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求;B、所述函數(shù)接口觸發(fā)應(yīng)用程序進(jìn)程進(jìn)入內(nèi)核空間,并將所述操作請(qǐng)求交由套接字層協(xié)議代理模塊處理;C、所述套接字層協(xié)議代理模塊將所述操作請(qǐng)求封裝為請(qǐng)求消息,并通過(guò)進(jìn)程間通信消息傳遞給協(xié)議棧用戶進(jìn)程;D、所述協(xié)議棧用戶進(jìn)程對(duì)所述操作請(qǐng)求進(jìn)行處理,并通過(guò)進(jìn)程間通信消息返回處理結(jié)果給所述套接字層協(xié)議代理模塊;E、所述套接字層協(xié)議代理模塊將處理結(jié)果返回給應(yīng)用程序進(jìn)程。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟D中,所述協(xié)議棧用戶進(jìn)程在當(dāng)前條件不能滿足所述操作請(qǐng)求時(shí),在返回的處理結(jié)果中包括需要等待的信息;當(dāng)套接字層協(xié)議代理模塊收到的處理結(jié)果中包括需要等待信息時(shí),則暫時(shí)不封裝和返回處理結(jié)果給應(yīng)用程序進(jìn)程,而是阻塞應(yīng)用程序進(jìn)程等待通知事件;所述協(xié)議棧用戶進(jìn)程在當(dāng)前條件滿足所述操作請(qǐng)求時(shí),向所述套接字層協(xié)議代理模塊返回通知事件;所述套接字層協(xié)議代理模塊將該通知事件中對(duì)應(yīng)的應(yīng)用程序進(jìn)程喚醒。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟A中,在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,如是則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求,所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符;否則執(zhí)行如下步驟All、應(yīng)用程序進(jìn)程向套接字層協(xié)議代理模塊請(qǐng)求創(chuàng)建全局文件描述符;A12、套接字層協(xié)議代理模塊通過(guò)進(jìn)程間通信機(jī)制發(fā)送文件描述符創(chuàng)建請(qǐng)求到所述協(xié)議棧用戶進(jìn)程;A13、所述協(xié)議棧用戶進(jìn)程根據(jù)文件描述符創(chuàng)建請(qǐng)求生成一個(gè)唯一的私有文件描述符,并將所述私有文件描述符返回給所述套接字層協(xié)議代理模塊;A14、套接字層協(xié)議代理模塊生成一個(gè)對(duì)應(yīng)的全局文件描述符并將該全局文件描述符和所述私有文件描述符綁定存儲(chǔ),返回該全局文件描述符給應(yīng)用程序進(jìn)程;之后執(zhí)行步驟A至步驟E,應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息, 套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述私有文件描述符標(biāo)識(shí)連接信息,套接字層協(xié)議代理模塊根據(jù)所保存的綁定關(guān)系,將所述私有文件描述符和所述全局文件描述符進(jìn)行轉(zhuǎn)換。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟A中,在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,如是則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求,所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符;否則執(zhí)行如下步驟A21、應(yīng)用程序進(jìn)程向套接字層協(xié)議代理模塊請(qǐng)求創(chuàng)建全局文件描述符; A22、套接字層協(xié)議代理模塊根據(jù)該文件描述符創(chuàng)建請(qǐng)求生成一個(gè)全局文件描述符; A23、套接字層協(xié)議代理模塊通過(guò)進(jìn)程間通信機(jī)制發(fā)送文件描述符創(chuàng)建請(qǐng)求和生成的全局文件描述符到所述協(xié)議棧用戶進(jìn)程;A24、所述協(xié)議棧用戶進(jìn)程根據(jù)收到的文件描述符創(chuàng)建請(qǐng)求生成對(duì)應(yīng)的唯一的私有文件描述符;并將該私有文件描述符和所述收到全局文件描述符綁定存儲(chǔ);套接字層協(xié)議代理模塊將全局文件描述符返回給應(yīng)用程序進(jìn)程;之后執(zhí)行步驟A至步驟E,應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息, 套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述全局文件描述符標(biāo)識(shí)連接信息,協(xié)議棧用戶進(jìn)程根據(jù)所保存的綁定關(guān)系,將所述全局文件描述符和私有文件描述符進(jìn)行轉(zhuǎn)換,以私有文件描述符標(biāo)識(shí)連接信息。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述步驟A中,在應(yīng)用程序進(jìn)程發(fā)起操作請(qǐng)求時(shí),首先判斷是否存在對(duì)應(yīng)的全局文件描述符,如是則直接調(diào)用SOCKET函數(shù)接口或標(biāo)準(zhǔn)I/O函數(shù)接口發(fā)起操作請(qǐng)求,所述操作請(qǐng)求中包含對(duì)應(yīng)的全局文件描述符;否則執(zhí)行如下步驟A31、應(yīng)用程序進(jìn)程向套接字層協(xié)議代理模塊請(qǐng)求創(chuàng)建全局文件描述符; A32、套接字層協(xié)議代理模塊根據(jù)該文件描述符創(chuàng)建請(qǐng)求生成一個(gè)全局文件描述符; A33、套接字層協(xié)議代理模塊通過(guò)進(jìn)程間通信機(jī)制發(fā)送文件描述符創(chuàng)建請(qǐng)求和生成的全局文件描述符到所述協(xié)議棧用戶進(jìn)程;A34、所述協(xié)議棧用戶進(jìn)程根據(jù)文件描述符創(chuàng)建請(qǐng)求,將所述全局文件描述符傳入對(duì)應(yīng)的SOCKET函數(shù)接口中,并將該全局文件描述符保存在數(shù)據(jù)結(jié)構(gòu)中;所述套接字層協(xié)議代理模塊將全局文件描述符返回給應(yīng)用程序進(jìn)程;之后執(zhí)行步驟A至步驟E,應(yīng)用程序進(jìn)程發(fā)起包含有全局文件描述符的操作請(qǐng)求;其中應(yīng)用程序進(jìn)程和套接字層協(xié)議代理模塊之間利用所述全局文件描述符標(biāo)識(shí)連接信息, 套接字層協(xié)議代理模塊和協(xié)議棧用戶進(jìn)程之間利用所述全局文件描述符標(biāo)識(shí)連接信息,協(xié)議棧用戶進(jìn)程中也用所傳入的全局文件描述符標(biāo)識(shí)連接信息。
10.根據(jù)權(quán)利要求4所述的方法,其特征在于,該方法進(jìn)一步包括判斷應(yīng)用程序進(jìn)程采用的通信協(xié)議是否為所述協(xié)議棧支持且所述套接字層協(xié)議代理模塊注冊(cè)過(guò)的協(xié)議,如果是則利用所述套接字層協(xié)議代理模塊進(jìn)行通信;否則不利用所述套接字層協(xié)議代理模塊進(jìn)行通信。
全文摘要
本發(fā)明公開(kāi)了一種協(xié)議棧運(yùn)行裝置和方法,所述裝置包括協(xié)議棧用戶進(jìn)程,用于協(xié)議棧獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中;套接字層協(xié)議代理模塊,在系統(tǒng)初始化時(shí)注冊(cè)于內(nèi)核空間,用于應(yīng)用程序進(jìn)程與協(xié)議棧用戶進(jìn)程間的通信。所述方法包括協(xié)議棧用戶進(jìn)程獨(dú)立于應(yīng)用程序進(jìn)程運(yùn)行在用戶空間中,并在系統(tǒng)初始化時(shí),在內(nèi)核空間內(nèi)注冊(cè)套接字層協(xié)議代理模塊;應(yīng)用程序進(jìn)程和協(xié)議棧用戶進(jìn)程之間通過(guò)所述套接字層協(xié)議代理模塊進(jìn)行通信。利用本發(fā)明,可以提高協(xié)議棧的可靠性、信息共享度和兼容性,降低軟件平臺(tái)移植的調(diào)試、維護(hù)、和開(kāi)發(fā)難度。
文檔編號(hào)G06F9/54GK102339234SQ20111019379
公開(kāi)日2012年2月1日 申請(qǐng)日期2011年7月12日 優(yōu)先權(quán)日2011年7月12日
發(fā)明者戴俊文, 李永合, 林茂, 王佑剛, 羅向征 申請(qǐng)人:邁普通信技術(shù)股份有限公司