关于创建socket失败的问题

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

你可能感兴趣的:(网络编程)