什么时候closuresCAsyncSocket是安全的?

如果在调用Connect之后但在调用OnConnectcallback之前删除了CAsyncSocket ,则CAsyncSocket崩溃我的应用程序。 ASSERT(pSocket != NULL)CAsyncSocket::DoCallBack失败,应用程序退出。

换句话说,如果我创build一个CAsyncSocket ,尝试将其连接到服务器,然后在连接成功或失败之前终止它,我有问题。 我可以通过实现OnConnect并设置一个表示连接尝试完成的标志来避免这种特殊的崩溃。 如果该标志是错误的,我知道删除是不安全的。

在删除对象之前,是否还需要检查其他情况? 有没有一种方法来检查它是否安全? 或者是否需要为我可能启动的任何操作( OnReceiveOnSendOnConnect )实现所有callback,并确保已经调用了这些callback?

请参阅FIX:声明失败,Sockcore.cpp,Microsoft支持文章475行执行分析。

其他参考:

  1. 如何处理CAsyncSocket :: OnClose,Alan Ning 。
  2. 使用MFC和Windows套接字编写简单的基于HTTP的服务器,David Cook,1996年2月,Microsoft Systems Journal :MFC“死”套接字映射。