关于 AfxSocketInit()

本文讲解了在使用WinSock API前如何通过WSAStartup()函数进行初始化,并且介绍了MFC库中的AfxSocketInit()函数如何简化这一过程。此外,还讨论了在应用程序退出时如何避免重复调用WSACleanup()函数的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一般来说 WASAtarup() 是应用程序调用的Windows Sockets dll的第一个函数,在调用任何Winsock Api之前,必须调用WSAStartup()进行初始化,最后调用WSACleanup()做清理工作。也就是 WSAStartup与 WSACleanup要配对使用。

      MFC中的函数 AfxSocketInit() 包装了函数 WSAStartup(), 在支持WinSock的应用程序的初始化函数IninInstance()中调用AfxSocketInit()进行初始化,程序则不必调用WSACleanUp()。 

  

      如果你再次调用WSACleanup, 可能会出问题!

  为什么呢?

      

  可以看到,有这么一句,这里是有回调:

  // setup for termination of sockets
  pState->m_pfnSockTerm = &AfxSocketTerm;

       而回调的具体内容如下:

  void (AFXAPI *m_pfnSockTerm)(void); // set once initialized

 

  

  可见,回调AfxSocketTerm中会WSACleanup~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值