青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Creative Commons License
本Blog采用 知識共享署名-非商業(yè)性使用-禁止演繹 3.0 Unported許可協(xié)議 進行許可。 —— Fox <游戲人生>

游戲人生

游戲人生 != ( 人生 == 游戲 )
站點遷移至:http://www.yulefox.com。請訂閱本博的朋友將RSS修改為http://feeds.feedburner.com/yulefox
posts - 62, comments - 508, trackbacks - 0, articles - 7

ACE: Socket封裝(01)

Posted on 2009-09-01 14:22 Fox 閱讀(3926) 評論(3)  編輯 收藏 引用 所屬分類: T技術碎語

本文同步自游戲人生

o *__ 序 __* o

在閱讀ACE代碼和C++NPv1, v2, APG的時候,我意識到一個問題:雖然稍有C++和網(wǎng)絡基礎的同學都可以讀懂ACE,但如果你對OS(五大管理模塊都包含在內(nèi))、TCP/IP、C++、Design Patterns了解越多,你就越能體會ACE為什么需要這么龐雜,雖然它不夠完美(但至少我還沒有資格來批評這一點,我現(xiàn)在最常想做的一個動作就是五體投地)。

而且我隱約感覺到,我現(xiàn)在所寫的很多東西在以后(對于有些人或許就是現(xiàn)在)看來會相當不深刻、相當不嚴謹,但對于一段學習歷程,這個過程是必然的、必需的。

在C++NPv1中,Douglas C. Schmidt把原始socket及其API的缺陷有些妖魔化了,比如一段加上注釋、空行在內(nèi)的35行的代碼,被指出有10處錯誤之多。這就像很多其他語言的倡導者或反傳統(tǒng)C/C++指針者在批評指針時的說法一樣。長期使用原始socket和指針的同學對此感覺很不舒服,何況socket API提供了大量錯誤檢測的接口,至多是不夠友好罷了。你好就好了,沒必要抓住別人一頓痛批吧,『本是同根生,相煎何太急』。

雖然Solaris、Linux的很多版本及Windows對起源于Berkeley的socket API進行了重寫,但不可否認,由于歷史原因和POSIX標準的存在,對于使用者而言,我們可以無視這些API的實現(xiàn)差異。只是一旦我們從socket通信擴展到其他IPC通信的話,就需要正視各種I/O細節(jié)的差異了。

由于UNIX中,對于socket, file, pipe, device的大多數(shù)操作,描述符都是通用的(這一點,OS上面講的更清楚些)。而Windows中,句柄大多不能互換(socket對于MS來說是舶來品)。系統(tǒng)和標準的不一致導致地址、協(xié)議和API的混雜甚至混亂。

UNIX下的描述符和Windows的句柄可以看作是同一個概念,只是應用環(huán)境不一樣,所描述的內(nèi)容也時常不一樣,再簡單了說,它們都是一個整型的ID。

ACE的源碼中使用了大量預處理指令,尤其在跨平臺/編譯環(huán)境的部分更加明顯。鑒于C/C++標準的博大胸懷,有些指令需要閱讀相關編譯器提供的幫助文檔:

o #pragma: GCC, MSVC

o #define (#, #@, ##) : GCC, MSVC

其中有若干代碼文件以.inl為后綴,里面是對部分函數(shù)的內(nèi)聯(lián)實現(xiàn),以使代碼結構看上去更加簡潔。如果確定使用內(nèi)聯(lián)函數(shù)的話,*.inl將被包含于*.h的最后,如果不使用,則像*.h一樣,包含于*.cpp的頭部。

ACE采用doxygen輸出文檔,在閱讀代碼注釋時能夠感受到差異,但基本不會影響閱讀。

o * __ 關于第3章(C++NPv1)__ * o

ACE抽象的地址類ACE_Addr擁有ACE_DEV_Addr, ACE_FILE_Addr, ACE_INET_Addr, ACE_SPIPE_Addr, ACE_UNIX_Addr五個子類。對于狹義上的網(wǎng)絡通信(TCP/IP)而言,ACE_INET_Addr對應于我們熟悉的sockaddr_in。

ACE_IPC_SAP是IPC(interprocess communication)I/O操作類的root類。

從編碼的角度看,這個類漂亮的地方在于示例了抽象類的另一種實現(xiàn)方式。

一提到抽象類,大多數(shù)人的第一反應是pure virtual function。當一個基類確定需要使用virtual function時,這是一個不錯的選擇。但我們都知道虛擬函數(shù)有開銷。而且對于一個結構簡單的抽象基類和其繼承子類(尤其是大量使用時),一個虛函數(shù)表帶來的開銷會讓整個設計顯得十分蹩腳。

我們都知道如何強制讓一個類無法使用default constructor(protected)。如果對基類使用該方法,僅使子類具有public的default constructor,這就達到了定義抽象基類的效果。

virtual destructor的意義在于防止delete父類指針(指向子類對象)時未調(diào)用子類destructor。在此例中,為避免這種情況,同樣將destructor聲明為protected即可。

從設計實現(xiàn)的角度看,相較于socket API,ACE_IPC_SAP的子類ACE_SOCK提供了編譯時對句柄合法性的檢測。

從邏輯功能層面劃分,socket有三種角色:

o active connection role (connector):主動連接

o passive connection role (acceptor):被動連接

o communication role (stream):數(shù)據(jù)通信

但socket API畢竟不是OOD出來的,對于一個socket描述符,也完全沒有必要去限制其擔負的功能,更不可能搞成三種不同的socket。而OOD的ACE則可以輕易實現(xiàn)對socket對象及其操作的封裝。

工廠類ACE_SOCK_Connector是一個主動創(chuàng)建通信端的工廠類。socket API中的connect接口只是為一個socket建立與其它peer的網(wǎng)絡連接,而不產(chǎn)生新的socket實例,也不依賴于任何其它socket。同樣,ACE_SOCK_Connector只是為一個ACE_SOCK_Stream對象(對用于數(shù)據(jù)通信的socket的封裝)連接到ACE_Addr(對struct sockaddr的封裝)提供接口,也不含對ACE_SOCK_Stream對象的其它操作。

工廠類ACE_SOCK_Acceptor是一個被動創(chuàng)建通信端的工廠類。當監(jiān)聽到新的網(wǎng)絡連接后,為該連接初始化一個ACE_SOCK_Stream對象。和connector不同的是,acceptor依賴于一個已經(jīng)存在的充當監(jiān)聽功能的socket句柄(ACE_SOCK),因此,ACE_SOCK_Acceptor是ACE_SOCK的一個子類。

ACE_SOCK_Stream是只負有通信傳輸功能的socket,對應connection-oriented的TCP通信格式stream,和UDP的CE_SOCK_CODgram相呼應。ACE_SOCK_Stream只是socket的通信載體,在兩個工廠ACE_SOCK_Connector和ACE_SOCK_Acceptor中初始化。這樣一個類除支持最基本的數(shù)據(jù)發(fā)送(send)和接收(recv)和阻塞(blocking)、非阻塞(nonblocking)及定時(timed)的I/O模式外,還支持分散讀取(scatter-read)和集中寫入(gather-write)。

對于一個簡單的『網(wǎng)絡課程作業(yè):寫一個有連接的IM小程序』,上面這些內(nèi)容已經(jīng)足夠了。當然即使使用對應的幾個socket API也已經(jīng)足夠了。但我們顯然更加關心如此龐大的一個庫,是如何解決復雜的網(wǎng)絡應用的,我尤其關心的是多線程并發(fā)如何更好的處理。

所以,我準備跑到第8、9章了。

Feedback

# re: ACE: Socket封裝(01)  回復  更多評論   

2009-09-01 16:10 by 99書城
很好啊~~

# re: ACE: Socket封裝(01)  回復  更多評論   

2009-09-01 17:15 by yleesun
不錯,很真實

# re: ACE: Socket封裝(01)  回復  更多評論   

2012-08-17 22:14 by swiss replica watches
清爽的很
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线观看网址综合| 久久九九热re6这里有精品| 欧美激情网友自拍| 亚洲人成网站色ww在线| 免费观看一级特黄欧美大片| 欧美在线在线| 亚洲国产精品久久| 亚洲人体一区| 欧美性大战xxxxx久久久| 亚洲欧美成人一区二区三区| 中日韩男男gay无套 | 久久人人97超碰国产公开结果| 欧美一区1区三区3区公司| 国产亚洲日本欧美韩国| 免费亚洲婷婷| 欧美日韩免费观看中文| 香蕉久久a毛片| 久久在线视频在线| 一本色道久久综合狠狠躁的推荐| 亚洲久久视频| 国产亚洲欧洲| 亚洲精品免费在线播放| 国产精品久久久久久久浪潮网站| 久久久亚洲午夜电影| 欧美激情综合亚洲一二区 | 很黄很黄激情成人| 亚洲欧洲日产国产综合网| 国产精品美腿一区在线看 | 欧美在线观看视频一区二区三区| 久久久久久久欧美精品| 日韩图片一区| 久久成人免费| 亚洲一区在线免费观看| 久久免费国产精品1| 亚洲一区二区少妇| 免费日韩一区二区| 欧美在线免费观看视频| 欧美久久久久久久久| 久久久伊人欧美| 欧美三级第一页| 欧美高清视频www夜色资源网| 欧美图区在线视频| 欧美激情精品久久久久久黑人 | 欧美成人免费视频| 久久久久久91香蕉国产| 欧美日韩人人澡狠狠躁视频| 欧美大片一区二区| 国产欧美精品日韩精品| 日韩视频一区二区| 亚洲国产视频一区| 欧美在线日韩| 久久国产主播| 国产精品久久久久久久久婷婷| 亚洲黄色影院| 91久久国产精品91久久性色| 性久久久久久久久| 欧美一区在线看| 国产精品久久9| 亚洲理论在线| 一本一道久久综合狠狠老精东影业 | 久久久久国产精品人| 亚洲主播在线| 欧美色大人视频| 亚洲精品一区二区三区婷婷月| 亚洲国产精品尤物yw在线观看| 欧美一区三区三区高中清蜜桃| 亚洲欧美日韩在线不卡| 欧美另类一区| 亚洲人成网站777色婷婷| 亚洲国产高清自拍| 老司机一区二区| 欧美寡妇偷汉性猛交| 激情丁香综合| 久久综合九色| 欧美激情影院| 夜夜嗨av一区二区三区网站四季av | 欧美一区二粉嫩精品国产一线天| 亚洲欧美日韩在线一区| 国产精品拍天天在线| 亚洲一区亚洲| 久久久亚洲综合| 亚洲第一精品福利| 欧美丰满少妇xxxbbb| 亚洲人成人99网站| 亚洲尤物在线| 国产一区二区久久| 久久免费99精品久久久久久| 欧美激情五月| 亚洲视频高清| 国产精品一区二区你懂得| 欧美伊人影院| 欧美黑人在线播放| 一区二区三区国产精华| 国产精品视频一二三| 久久精品99国产精品日本| 欧美国产精品人人做人人爱| 日韩网站在线观看| 国产精品丝袜白浆摸在线| 欧美亚洲免费| 亚洲盗摄视频| 欧美一区午夜精品| 亚洲国产高清一区二区三区| 欧美日韩国产麻豆| 欧美一二三区在线观看| 亚洲成色777777在线观看影院| 一区二区三区回区在观看免费视频| 国产精品久久久久久久久久免费看 | 久久精品在线免费观看| 亚洲级视频在线观看免费1级| 亚洲在线视频| 亚洲夫妻自拍| 国产精品色午夜在线观看| 久久欧美中文字幕| 亚洲视频一二区| 欧美黄网免费在线观看| 午夜精品亚洲| 一本色道久久综合亚洲精品高清| 国产亚洲视频在线观看| 欧美日韩另类在线| 久久这里只有| 欧美在线看片| 亚洲一区二区在线视频| 亚洲人成网站999久久久综合| 久久野战av| 欧美亚洲尤物久久| 99这里有精品| 91久久精品一区| 在线观看日产精品| 国产丝袜一区二区| 国产精品永久免费| 欧美日本在线一区| 欧美α欧美αv大片| 久久久999成人| 欧美在线免费观看| 亚洲欧美日韩天堂| 亚洲午夜伦理| 在线亚洲精品福利网址导航| 亚洲三级免费电影| 亚洲人午夜精品免费| 亚洲第一精品福利| 欧美激情久久久| 欧美黄色小视频| 欧美激情性爽国产精品17p| 欧美r片在线| 欧美高清视频www夜色资源网| 老司机免费视频久久| 久久久久成人网| 老司机成人在线视频| 免费看的黄色欧美网站| 免费中文日韩| 亚洲国产日韩精品| 亚洲精品韩国| 99国产成+人+综合+亚洲欧美| 99精品免费视频| 亚洲视频免费观看| 性欧美18~19sex高清播放| 新狼窝色av性久久久久久| 欧美一区二区黄色| 久久久久久一区二区三区| 久久久久九九九| 欧美成人午夜免费视在线看片| 欧美精品久久99久久在免费线| 欧美国产一区在线| 欧美三级日韩三级国产三级| 国产精品视频免费一区| 国产日韩精品一区二区三区在线| 国内精品模特av私拍在线观看| 影音先锋日韩有码| 夜夜嗨网站十八久久| 午夜精品一区二区三区在线视| 久久精品99国产精品日本| 美女视频一区免费观看| 亚洲精品1区| 亚洲欧美国产精品va在线观看| 久久激情五月丁香伊人| 欧美1区2区3区| 国产精品免费观看在线| 一区二区三区在线观看国产| 亚洲精品一区在线观看| 午夜在线精品| 欧美福利视频网站| 这里只有精品视频在线| 久久精品国产v日韩v亚洲 | 欧美网站在线| 国模吧视频一区| 国产精品99久久99久久久二8 | 久久伊人亚洲| 99av国产精品欲麻豆| 久久国产精品高清| 欧美精品999| 黑人中文字幕一区二区三区| 99精品免费网| 男女av一区三区二区色多| 一个色综合av| 欧美成在线视频| 精品51国产黑色丝袜高跟鞋| 中国av一区| 亚洲国产成人精品女人久久久| 亚洲欧美国产va在线影院| 欧美精品一线|