• <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>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Winsock2中WSAAsynSelect()模型各種事件的觸發(fā)條件

            轉(zhuǎn)載自:http://www.chinaitpower.com/A/2005-03-03/109697.html

            使用WSAAsynSelect()模型的關(guān)鍵是要搞清楚各種事件的觸發(fā)條件,不然會(huì)造成讀或?qū)憯?shù)據(jù)混亂。
            這些事件的觸發(fā)條件同樣適用于CAsyncSocket

            =======================
            [1]FD_READ事件觸發(fā)條件:
            1.在數(shù)據(jù)到達(dá)socket后,并且從來(lái)沒(méi)有觸發(fā)過(guò)FD_READ(也就是最開(kāi)始的階段)
            2.在數(shù)據(jù)到達(dá)socket后,并且前一個(gè)recv()調(diào)用后
            3.調(diào)用recv()后,緩沖區(qū)還有未讀完的數(shù)據(jù)


            第3點(diǎn)過(guò)程如下:
            1.100 bytes 數(shù)據(jù)到達(dá),winsock2發(fā)出FD_READ
            2.程序用recv()只讀入50 bytes,還剩下50 bytes
            3.winsock2繼續(xù)發(fā)出FD_READ消息


            recv()返回WSAEWOULDBLOCK的情況:
            1.有數(shù)據(jù)到達(dá),F(xiàn)D_READ觸發(fā),該消息加入程序的消息隊(duì)列
            2.在還沒(méi)處理該消息前,程序就把數(shù)據(jù)recv()了
            3.等到處理該FD_READ消息時(shí),程序調(diào)用recv()就會(huì)返回WSAEWOULDBLOCK(因?yàn)閿?shù)據(jù)在這之前就recv()了)


            注意:
            1.winsock2發(fā)出一個(gè)FD_READ后,如果程序沒(méi)有用recv(),即使還有數(shù)據(jù)沒(méi)接收FD_READ也不會(huì)再觸發(fā)另一個(gè)FD_READ,要等到recv()調(diào)用后FD_READ才會(huì)發(fā)出。
            2.對(duì)一個(gè)FD_READ多次recv()的情形:如果程序?qū)σ粋€(gè)FD_READ多次recv()將會(huì)造成觸發(fā)多個(gè)空的FD_READ,所以程序在第2次recv()前要關(guān)掉FD_READ(可以使用WSAAsynSelect關(guān)掉FD_READ),然后再多次recv()。
            3.recv()返回WSAECONNABORTED,WSAECONNRESET...等消息,可以不做任何處理,可以等到FD_CLOSE事件觸發(fā)時(shí)再處理


            =====================
            [2]FD_ACCEPT事件觸發(fā)條件:
            1.當(dāng)有請(qǐng)求建立連接,并且從來(lái)沒(méi)有觸發(fā)過(guò)FD_ACCEPT(也就是最開(kāi)始的階段)
            2.當(dāng)有請(qǐng)求建立連接,并且前一個(gè)accept()調(diào)用后


            注意:當(dāng)FD_ACCEPT觸發(fā)后,如果程序沒(méi)有調(diào)用accept(),即使還有建立連接的請(qǐng)求FD_ACCEPT也不會(huì)觸發(fā),要直到accept()調(diào)用后


            ========================
            [3]FD_WRITE事件觸發(fā)條件:
            1.第一次connect()或accept()后(即連接建立后)
            2.調(diào)用send()返回WSAEWOULDBLOCK,并且直到發(fā)送緩沖區(qū)準(zhǔn)備好(為空)后


            注意:當(dāng)前一次調(diào)用send()沒(méi)有返回WSAEWOULDBLOCK時(shí),如果緩沖區(qū)準(zhǔn)備好了,也不會(huì)觸發(fā)FD_WRITE的


            ========================
            [4]FD_CLOSE事件觸發(fā)條件:自己或?qū)Χ酥袛噙B接后
            注意:closesocket()調(diào)用后FD_CLOSE不會(huì)觸發(fā)


            ========================
            [5]FD_CONNECT事件觸發(fā)條件:調(diào)用了connect(),并且連接建立后。


            詳細(xì)參考MSDN

            posted on 2009-09-15 21:31 楊粼波 閱讀(779) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久99精品久久久大学生| 亚洲另类欧美综合久久图片区| 日本久久中文字幕| 91精品国产色综久久 | 精品久久一区二区三区| 亚洲人成伊人成综合网久久久| 一级a性色生活片久久无| 欧美性猛交xxxx免费看久久久| 国产精品九九久久免费视频| 久久婷婷久久一区二区三区| 青青草国产精品久久久久| 久久噜噜电影你懂的| 日本精品久久久久中文字幕| 亚洲国产精品久久久久久| 日韩欧美亚洲综合久久影院d3| 色综合久久中文综合网| 国产69精品久久久久99尤物| 国产精品久久久久久久午夜片| 国产福利电影一区二区三区,免费久久久久久久精 | aaa级精品久久久国产片| 国产日产久久高清欧美一区| 久久最新精品国产| 久久久久人妻一区精品| 热久久最新网站获取| 亚洲香蕉网久久综合影视 | 久久丝袜精品中文字幕| 久久综合久久综合亚洲| 亚洲va中文字幕无码久久| 国产精品18久久久久久vr| 国产成人香蕉久久久久 | 日韩精品久久无码中文字幕| 狠狠色丁香久久综合五月| 精品熟女少妇aⅴ免费久久| 欧美精品九九99久久在观看| 日韩精品久久久久久免费| 四虎国产精品免费久久5151 | 亚洲AV日韩AV天堂久久| 一级做a爰片久久毛片人呢| 一级a性色生活片久久无 | 99久久免费国产精品| 99久久精品免费看国产一区二区三区 |