socket 10106问题解决日记
生活随笔
收集整理的這篇文章主要介紹了
socket 10106问题解决日记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很久沒寫博客了,這兩天解決了一個創建套接字(SOCKET)失敗,錯誤碼為10106的問題。從事網絡編程的朋友可能也遇到過類似問題,大多數都可以通過重裝系統解決。這次我想分析一下10106產生的根本原因,給大家提供另外一種思路,解決類似問題。
【環境】 WIN7,64位系統
【現象】 CAD2006平臺程序不能聯網,其他程序沒有問題
【錯誤原因】 創建SOCKET失敗,錯誤碼10106
【嘗試方法】 1. 在A.dll(非CAD程序啟動時加載)的入口函數中測試網絡連接,成功! 2. 在B.dll(CAD程序啟動時加載)的入口函數中測試網絡連接,失敗! 3. 在B.dll的入口函數中手動加載ws2_32.dll成功,mswsock.dll失敗,錯誤碼127! 4. 卸載用戶電腦上的卡巴斯基,不行! 5. 卸載cad重新安裝,然后使用Registry Mechanic修復注冊表,問題解決!
【原因分析】 使用MemDll加載mswsock.dll發現是修正IAT時失敗了,具體原因是修正WahDestroyHandleContextTable函數地址時失敗, ws2_32.dll模塊中找不到這個函數。我們知道,ws2_32.dll的5.1版本確實沒有導出此函數,此函數在ws2help.dll中導出; 但是在6.1版本中(win7),ws2_32.dll導出了該函數。 進一步調試,在B.dll的入口函數中加載ws2_32.dll成功后,根據模塊句柄獲取模塊路徑,發現CAD2006平臺程序中加載的ws2_32.dll模塊路徑在cad2006目錄下,而其他程序則是在system32目錄下。 令人不解的是,在cad2006目錄下根本找不到ws2_32.dll文件,在整個系統中全局搜索,也只找到3個ws2_32.dll文件,都在系統目錄下,并且都是6.1版本。手工拷貝一個6.1版本的ws2_32.dll文件到cad2006目錄,問題依舊。于是懷疑是CAD平臺程序的運行時環境出了問題(本質上是cad的運行時環境有問題),比如ws2_32.dll是不是真的加載成功了?獲取到的ws2_32.dll的模塊句柄是不是錯亂了?是不是根據句柄獲取模塊所在目錄的API錯亂了等等。 嘗試從已加載的ws2_32.dll模塊中獲取accept等5.1版本中的接口,都可以成功,這說明ws2_32.dll確實已經加載,并且有效,只是版本不對,是5.1,而非6.1。 最后將cad卸載掉重新安裝,問題解決!
【環境】 WIN7,64位系統
【現象】 CAD2006平臺程序不能聯網,其他程序沒有問題
【錯誤原因】 創建SOCKET失敗,錯誤碼10106
【嘗試方法】 1. 在A.dll(非CAD程序啟動時加載)的入口函數中測試網絡連接,成功! 2. 在B.dll(CAD程序啟動時加載)的入口函數中測試網絡連接,失敗! 3. 在B.dll的入口函數中手動加載ws2_32.dll成功,mswsock.dll失敗,錯誤碼127! 4. 卸載用戶電腦上的卡巴斯基,不行! 5. 卸載cad重新安裝,然后使用Registry Mechanic修復注冊表,問題解決!
【原因分析】 使用MemDll加載mswsock.dll發現是修正IAT時失敗了,具體原因是修正WahDestroyHandleContextTable函數地址時失敗, ws2_32.dll模塊中找不到這個函數。我們知道,ws2_32.dll的5.1版本確實沒有導出此函數,此函數在ws2help.dll中導出; 但是在6.1版本中(win7),ws2_32.dll導出了該函數。 進一步調試,在B.dll的入口函數中加載ws2_32.dll成功后,根據模塊句柄獲取模塊路徑,發現CAD2006平臺程序中加載的ws2_32.dll模塊路徑在cad2006目錄下,而其他程序則是在system32目錄下。 令人不解的是,在cad2006目錄下根本找不到ws2_32.dll文件,在整個系統中全局搜索,也只找到3個ws2_32.dll文件,都在系統目錄下,并且都是6.1版本。手工拷貝一個6.1版本的ws2_32.dll文件到cad2006目錄,問題依舊。于是懷疑是CAD平臺程序的運行時環境出了問題(本質上是cad的運行時環境有問題),比如ws2_32.dll是不是真的加載成功了?獲取到的ws2_32.dll的模塊句柄是不是錯亂了?是不是根據句柄獲取模塊所在目錄的API錯亂了等等。 嘗試從已加載的ws2_32.dll模塊中獲取accept等5.1版本中的接口,都可以成功,這說明ws2_32.dll確實已經加載,并且有效,只是版本不對,是5.1,而非6.1。 最后將cad卸載掉重新安裝,問題解決!
總結
以上是生活随笔為你收集整理的socket 10106问题解决日记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界杯开赛看球吃麻辣小龙虾
- 下一篇: C# socket 局域网聊天程序的一点