6 c++ winsock atexit wsastartup wsacleanup
可以通过atExit函数注册WSACleanup吗?我们有几个应用程序可以在代码中的不同点终止,因此我们希望避免在代码中将WSACleanup放在任何地方.我们可以通过DllMain调用WSAStartup/WSACleanup,因为我们有一个所有这些应用程序都使用的dll.但是,Microsoft严格建议不要通过DllMain使用WSAStartup/WSACleanup,因为这会导致死锁.我们可以将WSAStarup移出DllMain,并在访问Windows套接字库之前在所有应用程序的代码中的某一点调用它.而且,只要我们调用WSAStartup,我们就想使用atExit函数来注册对WSACleanup的调用.有没有人有这种方法的经验?谢谢!
如果您有一个多线程应用程序并且某些线程仍处于连接状态,则另一端的应用程序可能不喜欢终止连接的方式。因此,最好在 main() 终止之前以有序的方式关闭所有通信,完成此操作后,您也可以调用 WSACleanup。