关于创建socket失败的问题

本文解决了在程序中调用socket函数失败的问题,错误码为10106(WSAEPROVIDERNOTINIT)。通过调整网络模块的加载顺序,先加载其他模块再加载网络模块,最终解决了该问题。
昨天在调试程序的时候发现每次调用socket函数总是失败,可令人奇怪的是这个模块之前运行一直是OK!拿到的错误码是10106,宏是WSAEPROVIDERNOTINIT,意思大概是“请求的服务没有被加载或者初始化”,网上搜索的结果都说是WSAStartup没有调用,明显这种说法是不正确的,因为WSAStartup没有调用或调用失败的话,返回的错误码应该是WSANOTINITIALISED,而且我确实调用了这个函数,而且正确返回了,所以这个原因可以排除!由于我的网络部分是单独封装在一个模块中的,应用程序是静态链接这个模块,然后实现网络通信的。由于是静态链接,所以加载器会首先加载网络模块,我就想会不会是在网络模块加载之前有些必须的模块没有被加载,从而导致这个错误的?于是我就把静态加载改成了延时加载(动态加载也可以),首先加载其他模块,最后再加载网络模块。重新编译程序,运行,OK!问题解决!虽然事实证明了我的假想,但是我还是不太清楚究竟网络模块需要依赖哪些模块,因为WSAStartup已经正确返回了,说明底层网络库已经被加载,否则,WSAStartup应该都会失败,等待高人指点!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值