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

            牽著老婆滿(mǎn)街逛

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

            IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題

            最近發(fā)現(xiàn)我那簡(jiǎn)單得不再簡(jiǎn)單的IOCP+UDP的底層出錯(cuò)了,在大數(shù)據(jù)量的時(shí)候經(jīng)常會(huì)報(bào)錯(cuò),并且清一色都是報(bào)的:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤.報(bào)錯(cuò)之后,整個(gè)程序的堆棧就全部破壞掉了.從發(fā)現(xiàn)問(wèn)題到今日問(wèn)題的解決,已經(jīng)過(guò)去了一個(gè)月的時(shí)間.
            唯一能夠找到相關(guān)的資料只有:http://m.shnenglu.com/HendricLee/archive/2008/07/29/57436.html
            但是事實(shí)上,我的Overlapped都是復(fù)用的.因此,不大可能是此問(wèn)題導(dǎo)致的.經(jīng)過(guò)測(cè)試證明,也確實(shí)與此無(wú)關(guān).
            昨晚上又做了一系列的測(cè)試,結(jié)果到最后依舊是無(wú)果,百般無(wú)奈之下,只好問(wèn)人,后面QQ好友Sagasarate告訴了我原委,我知道之后,只有兩種感覺(jué):想哭,想撞墻.
            至于為什么,請(qǐng)看以下代碼便知了.非常非常之低級(jí)的錯(cuò)誤.
            bool CUDPRecvSendThread::postRecvRequest(CUdpOverLappedRecv* pOverLappedRecv)
            {
                ASSERT(pOverLappedRecv);
                
            if (pOverLappedRecv == NULL) return false;

                pOverLappedRecv
            ->Reset();

                DWORD dwBytesRecv 
            = 0;
                DWORD dwFlags 
            = 0;
                
            int nSenderAddrSize = sizeof (sockaddr_in);

                
            int rc = 0;
                rc 
            = ::WSARecvFrom(m_ServerSocket, pOverLappedRecv->GetWsaBuffer(), 1&dwBytesRecv, &dwFlags,
                    pOverLappedRecv
            ->GetClientAddr(), &nSenderAddrSize,
                    pOverLappedRecv
            ->GetOverlapped(), NULL);

                
            if (rc == SOCKET_ERROR)
                
            {
                    DWORD dwErrorCode 
            = ::WSAGetLastError();
                    
            if (dwErrorCode != WSA_IO_PENDING)
                    
            {
                        
            return false;
                    }

                }


                
            return true;
            }
            請(qǐng)對(duì)照著MSDN看.
            如果沒(méi)看出來(lái),那我來(lái)告訴你是為什么.
            問(wèn)題就在于WSARecvFrom的7個(gè)參數(shù).
            MSDN的描述:
            lpFromlen [in, out]

            A pointer to the size, in bytes, of the "from" buffer required only if lpFrom is specified.

            你會(huì)發(fā)現(xiàn),這個(gè)參數(shù)是一個(gè)輸入輸出值.而WSARecvFrom投遞的是一個(gè)異步的IOCP請(qǐng)求,故而,出了此方法(CUDPRecvSendThread::postRecvRequest)之后,nSenderAddrSize這個(gè)臨時(shí)變量就會(huì)被回收.不出事才怪了.
            好吧,這事就是我干出來(lái)的.今年竟是做一些腦殘的事情.腫么了我這是.T_T
            要解決這個(gè)問(wèn)題,最好的辦法就是把nSenderAddrSize作為CUdpOverLappedRecv的成員變量保存,這樣生命周期可以得以保證.
            好吧,這件腦殘事就這么結(jié)了.

            posted on 2012-10-15 11:42 楊粼波 閱讀(1959) 評(píng)論(8)  編輯 收藏 引用 所屬分類(lèi): 原創(chuàng)文章網(wǎng)絡(luò)編程C++Windows

            評(píng)論

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題 2012-10-16 03:37 fzy

            看了你代碼,不是你說(shuō)的問(wèn)題。
            是因?yàn)檫@里是個(gè)LPINT,是INT的指針,你的nSenderAddrSize沒(méi)有加&取地址符號(hào)。

              回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題 2012-10-16 15:56 楊粼波

            @fzy
            好吧,你足夠仔細(xì),遺漏了.  回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題 2013-02-08 09:04 cc7799

            我也碰到了同樣的問(wèn)題,多謝指點(diǎn),現(xiàn)在問(wèn)題解決了,非常感謝!  回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題 2013-05-31 15:24 謝謝哦

            謝謝了兄弟,我也是費(fèi)了一周時(shí)間啊  回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題[未登錄](méi) 2013-05-31 17:29 楊粼波

            @cc7799
            @謝謝哦
            咱們都是犯了粗心的毛病.很高興這個(gè)經(jīng)驗(yàn)共享能夠帶給你們幫助.  回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題 2013-09-29 16:44 brainpoint

            謝, 剛好剛碰上  回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題 2013-10-21 17:29 馬兒快跑

            同樣浪費(fèi)了我2天的debug。找打問(wèn)題后,再?gòu)木W(wǎng)絡(luò)上找到這個(gè)問(wèn)題。同樣想哭  回復(fù)  更多評(píng)論   

            # re: IOCP+UDP收包的時(shí)候:報(bào)0xC000000005,讀取0x00000010錯(cuò)誤的問(wèn)題[未登錄](méi) 2013-10-22 15:26 楊粼波

            @brainpoint
            很高興能夠幫助到你.

            @馬兒快跑
            呃.....終于找到了一樣二的人了.哈哈哈哈哈.....我一開(kāi)始以為只有我一個(gè)人這么二,原來(lái)我不是唯一的一個(gè),我好安慰啊....  回復(fù)  更多評(píng)論   

            伊人久久无码中文字幕| 久久精品国产一区二区电影| 精品久久久一二三区| 国产成人精品综合久久久| 久久精品人妻中文系列| 久久国产免费观看精品3| 久久青青草原国产精品免费| 日本国产精品久久| 久久久久久久综合日本亚洲| 日本WV一本一道久久香蕉| 国产午夜免费高清久久影院| 色综合合久久天天给综看| 久久99国产综合精品女同| 大香伊人久久精品一区二区| 色综合久久综精品| 99久久精品免费看国产一区二区三区 | 国产精品久久久久一区二区三区| 亚洲国产成人精品女人久久久 | 青青草原综合久久大伊人| 久久亚洲国产精品一区二区| 久久天天躁夜夜躁狠狠躁2022| 精品久久人人做人人爽综合| 人妻丰满AV无码久久不卡 | 久久丫精品国产亚洲av| 亚洲精品无码久久毛片| 国产精品综合久久第一页| 国产精品一区二区久久| 久久午夜无码鲁丝片| 久久综合亚洲鲁鲁五月天| 欧美色综合久久久久久| 久久亚洲中文字幕精品一区| 久久99精品国产麻豆蜜芽| 久久精品中文字幕一区| 国产激情久久久久影院老熟女免费 | 亚洲一区中文字幕久久| 国产高潮国产高潮久久久| 亚洲AV无码久久精品狠狠爱浪潮| 久久精品国产亚洲AV蜜臀色欲| 办公室久久精品| 色婷婷久久综合中文久久一本| 中文精品99久久国产|