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

            牽著老婆滿街逛

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

            IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題

            最近發現我那簡單得不再簡單的IOCP+UDP的底層出錯了,在大數據量的時候經常會報錯,并且清一色都是報的:報0xC000000005,讀取0x00000010錯誤.報錯之后,整個程序的堆棧就全部破壞掉了.從發現問題到今日問題的解決,已經過去了一個月的時間.
            唯一能夠找到相關的資料只有:http://www.shnenglu.com/HendricLee/archive/2008/07/29/57436.html
            但是事實上,我的Overlapped都是復用的.因此,不大可能是此問題導致的.經過測試證明,也確實與此無關.
            昨晚上又做了一系列的測試,結果到最后依舊是無果,百般無奈之下,只好問人,后面QQ好友Sagasarate告訴了我原委,我知道之后,只有兩種感覺:想哭,想撞墻.
            至于為什么,請看以下代碼便知了.非常非常之低級的錯誤.
            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;
            }
            請對照著MSDN看.
            如果沒看出來,那我來告訴你是為什么.
            問題就在于WSARecvFrom的7個參數.
            MSDN的描述:
            lpFromlen [in, out]

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

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

            posted on 2012-10-15 11:42 楊粼波 閱讀(1959) 評論(8)  編輯 收藏 引用 所屬分類: 原創文章網絡編程C++Windows

            評論

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題 2012-10-16 03:37 fzy

            看了你代碼,不是你說的問題。
            是因為這里是個LPINT,是INT的指針,你的nSenderAddrSize沒有加&取地址符號。

              回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題 2012-10-16 15:56 楊粼波

            @fzy
            好吧,你足夠仔細,遺漏了.  回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題 2013-02-08 09:04 cc7799

            我也碰到了同樣的問題,多謝指點,現在問題解決了,非常感謝!  回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題 2013-05-31 15:24 謝謝哦

            謝謝了兄弟,我也是費了一周時間啊  回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題[未登錄] 2013-05-31 17:29 楊粼波

            @cc7799
            @謝謝哦
            咱們都是犯了粗心的毛病.很高興這個經驗共享能夠帶給你們幫助.  回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題 2013-09-29 16:44 brainpoint

            謝, 剛好剛碰上  回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題 2013-10-21 17:29 馬兒快跑

            同樣浪費了我2天的debug。找打問題后,再從網絡上找到這個問題。同樣想哭  回復  更多評論   

            # re: IOCP+UDP收包的時候:報0xC000000005,讀取0x00000010錯誤的問題[未登錄] 2013-10-22 15:26 楊粼波

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

            @馬兒快跑
            呃.....終于找到了一樣二的人了.哈哈哈哈哈.....我一開始以為只有我一個人這么二,原來我不是唯一的一個,我好安慰啊....  回復  更多評論   

            韩国三级大全久久网站| 亚洲人成伊人成综合网久久久| 成人亚洲欧美久久久久| 精品久久久久久国产免费了| 久久久国产一区二区三区| 亚洲午夜无码AV毛片久久| 亚洲精品乱码久久久久久蜜桃不卡| 天天爽天天狠久久久综合麻豆| 久久国产欧美日韩精品| 国产激情久久久久影院老熟女免费| 久久久精品久久久久久 | 大香伊人久久精品一区二区| 无码人妻少妇久久中文字幕蜜桃| 国产精品久久国产精品99盘| 久久久久99精品成人片三人毛片 | 国产精品久久国产精麻豆99网站| 久久这里只精品国产99热| 国产69精品久久久久观看软件| 国产精品美女久久久久| 久久婷婷五月综合色99啪ak| 久久人人爽人人爽人人AV东京热| 国内精品久久久久久久亚洲| 亚洲综合伊人久久综合| 狠狠色综合久久久久尤物| 亚洲综合熟女久久久30p| 久久国产成人午夜AV影院| 久久久久成人精品无码中文字幕 | 99久久无色码中文字幕人妻| 亚洲国产精品久久66| 久久综合国产乱子伦精品免费| 久久久久亚洲精品中文字幕| 国产精品久久久久…| 久久久久亚洲AV成人网人人网站| 国产精品免费久久久久电影网| 久久婷婷五月综合97色一本一本| 色综合久久久久综合99| 国产精品成人无码久久久久久| 久久久久亚洲av无码专区| 久久久久亚洲av成人网人人软件 | 久久久WWW免费人成精品| 777久久精品一区二区三区无码|