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卸载掉重新安装,问题解决!
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在面试中,可能会涉及到一些与socket相关的问题。以下是一些常见的socket面试问题和答案: 1. 什么是socket? 答:Socket是一种用于网络通信的编程接口,它提供了一种机制,使得不同计算机上的程序可以通过网络进行通信。 2. socket的创建过程是怎样的? 答:使用socket()函数来创建套接字,确定套接字的各种属性。然后,服务器端使用bind()函数将套接字与特定的IP地址和端口绑定起来,客户端使用connect()函数建立连接。 3. 服务器端如何接收客户端的请求? 答:服务器端使用listen()函数让套接字进入被动监听状态,然后调用accept()函数,就可以随时响应客户端的请求了。 4. 在Linux和Windows下,socket的使用有什么区别? 答:在Linux下,不区分套接字文件和普通文件,可以使用write()函数向套接字中写入数据,使用read()函数从套接字中读取数据。而在Windows下,区分普通文件和套接字,从服务器端发送数据使用send()函数,客户端接收数据使用recv()函数。 这些是一些常见的socket面试问题和答案,希望对你有帮助!\[1\] #### 引用[.reference_title] - *1* [SOCKET面试题](https://blog.csdn.net/charles666_zq/article/details/108407341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值