[發明專利]在Linux內核中實現WinSock2的AcceptEx機制的方法有效
| 申請號: | 201010622296.2 | 申請日: | 2010-12-29 |
| 公開(公告)號: | CN102073531A | 公開(公告)日: | 2011-05-25 |
| 發明(設計)人: | 金濤;王承志;毛德操 | 申請(專利權)人: | 浙大網新科技股份有限公司 |
| 主分類號: | G06F9/45 | 分類號: | G06F9/45 |
| 代理公司: | 杭州九洲專利事務所有限公司 33101 | 代理人: | 陳繼亮 |
| 地址: | 310007 浙江*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | linux 內核 實現 winsock2 acceptex 機制 方法 | ||
技術領域
本發明涉及計算機操作系統領域,尤其是一種在Linux內核中實現WinSock2的AcceptEx機制的方法。
背景技術
操作系統相當于計算機的靈魂,任何計算機都離不開操作系統,同時也都受操作系統的限制,所有的應用軟件都是基于某種特定操作系統的,都只能在這種特定的操作系統上運行,搬到別的操作系統上就不能運行。因此,Windows應用只能在Windows操作系統上運行,而Linux應用也只能在Linux操作系統上運行。但是如果能讓Windows應用軟件直接在Linux操作系統上運行,那么用戶就有可能擺脫對Windows操作系統的依賴、而改用Linux操作系統,這顯然是很有意義的。
操作系統的核心稱為“內核”,但內核并不就等于操作系統。除內核以外,在應用軟件與內核之間通常還有些作為中間件的動態連接庫(DLL)。根據這些DLL的來源和功能的不同,有些是屬于用戶層的,有些則是屬于系統層的。系統層的DLL一般被認為是操作系統的一部分,這一點在Windows操作系統上表現得尤為突出。在Windows操作系統上,由諸多系統層DLL合在一起向應用軟件提供一個“應用編程界面”、即API,這是一組函數的定義,Windows應用軟件可以在其程序中調用這些API函數。只要Windows應用軟件能正常調用這些函數,它就“以為”自己是在Windows操作系統上運行。顯然,要讓Windows應用軟件能在Linux操作系統上運行,就得在Linux操作系統上為其提供一個相同的API。
在Windows操作系統為應用軟件提供的API中,有些函數是用來提供Socket服務的,主要用于網絡操作。Socket的概念和技術最初是在Unix操作系統中發展起來的,后來Linux繼承了下來。微軟則把這技術拿來為其所用,成為WinSock,這也是Windows操作系統為應用軟件所提供API的一部分。一般而言,WinSock?API函數與Linux中有關Socket的庫函數或系統調用有著相同的來源,因此很容易把這些API函數嫁接到Linux中與其相對應的函數或系統調用上。但是,微軟在把Socket技術拿來為其所用以后,在這基礎上也作了些改進和提高,在WinSock的第二版、即WinSock2中提供了兩個新的函數,就是AcceptEx()和TransmitFile()。這兩個函數主要面對服務器應用、特別是高負荷的Web服務器應用,可以在一定程度上提高服務器的效率。相比之下,Linux中卻沒有這兩個函數的對應物,
所以,使Linux支持AcceptEx()和TransmitFile()這兩個函數有著雙重的意義。首先這是為使Windows應用可以在Linux操作系統上運行這個目標所需要的。當然Windows應用并非都會用到這兩個函數,但是用到這兩個函數的也不在少數(特別是服務器應用)。如果Linux不能提供這樣的對應物,這部分Windows應用就不能在Linux操作系統上運行。其次是這兩個函數確實比Linux所提供的原始Socket函數在性能上有所提高,如果Linux不能提供這樣的對應物,在這一方面的性能上就會輸給Windows。
WinSock2的AcceptEx()是對原始Socket函數或系統調用accept()的改進和提高。在原始的Socket編程模式中、也就是Linux的Socket編程模式中,服務器應用軟件的操作模式大體上是這樣的:
1.通過socket()(在Linux上是系統調用,在Windows上是API函數,下同)創建一個Socket。
2.通過listen()睡眠等待客戶端前來連接,一旦接收到客戶端的連接請求便返回,讓服務端決定是否接受。
3.如果決定接受連接,服務端便通過accept()接受并建立起與客戶端的網絡連接。在此過程中accept()會新創建、并返回一個Socket(常稱為“連接端口”),作為與客戶端的連接端點,而原先的那個Socket(常稱為“收聽端口”)則又用來通過listen()收聽、等待別的連接,因為很可能接連不斷地有連接請求到來。通常,在從accept()返回以后會創建一個新的線程,并把由accept()創建并返回的那個Socket交給這個新線程。而原來的那個主線程,則回到上面的第2步。
4.新線程與客戶端通信并為其提供服務,直至完成了客戶端所要求的服務。
5.然后就斷開與客戶端的網絡連接,并關閉用作連接端口的Socket。
6.退出線程的運行,本線程消亡;或者等待主線程交給新的連接,然后為新的客戶端服務。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙大網新科技股份有限公司,未經浙大網新科技股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201010622296.2/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:系統管理總線的測試方法
- 下一篇:汽車空調HVAC包裝箱





