關於WSARecv在IOCP使用中程序崩潰的問題

    最近使用IOCP在搞一個服務器端程序,發現在release編出來的版本運行的時候,由於接收數據過快,出現程序崩潰,儘管release生成調試信息,但堆棧處於不可調試的狀態。而debug情況下不出現這種情況。後來在網上,找了兩天,試了兩天。終於找到方法。

    原因是:WSARecv中的Overlap參數不能設置成局部變量,而由於我是在一個函數中定義了一個Overlap局部變量,當WSARecv返回以後,Overlap這個變量是失效了的,而WSARecv中Overlap傳進去的是地址,IOCP在WSARecv返回以後,還需要繼續使用這個參數,而由於局部變量失效,導致程序崩潰,對於沒有碰到過類似問題的人來說非常痛苦(找不到bug所在和崩潰原因)。所以應該在程序運行過程中保持Overlap變量的有效性。

發佈了52 篇原創文章 · 獲贊 7 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章