我用SOCKET写了一个FTP断点下载的程序,在各个线程下载完数据后,线程在线程析构函数中程序自动去关闭套接字(我没有自己调用close()函数),执行到内部文件SOCKCORE.cpp文件的下面语句出错:
void PASCAL CAsyncSocket::KillSocket(SOCKET hSocket, CAsyncSocket* pSocket)
{
--> ASSERT(CAsyncSocket::LookupHandle(hSocket, FALSE) != NULL); _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState; CAsyncSocket::DetachHandle(hSocket, FALSE);
if (pState->m_hSocketWindow != NULL)
{
::PostMessage(pState->m_hSocketWindow, WM_SOCKET_DEAD,
(WPARAM)hSocket, 0L);
CAsyncSocket::AttachHandle(hSocket, pSocket, TRUE);
}
}
void PASCAL CAsyncSocket::KillSocket(SOCKET hSocket, CAsyncSocket* pSocket)
{
--> ASSERT(CAsyncSocket::LookupHandle(hSocket, FALSE) != NULL); _AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState; CAsyncSocket::DetachHandle(hSocket, FALSE);
if (pState->m_hSocketWindow != NULL)
{
::PostMessage(pState->m_hSocketWindow, WM_SOCKET_DEAD,
(WPARAM)hSocket, 0L);
CAsyncSocket::AttachHandle(hSocket, pSocket, TRUE);
}
}
解决方案 »
- VC 函数调用
- 第一次写select模型,recv总是不成功,请教各位
- Win32 SDK. 在资源创建的对话框上添加一个ListControl 为什么导致对话框无法显示.
- 多线程发送数据,如何控制各个线程的发送速率?各线程的发送速率不同。
- VC中有API函数控制文件不让拷贝的吗?
- 实现水波纹,请高手指教
- scanner扫描,统计输入字符串中的所有界符个数之和输出
- 求MSDN LIBRARY OCT 2001
- 语音聊天和视频??
- 那里有vc对声音、音频信息的编程资料、文档?谢谢!(100分不够可加)
- 提供函数实现根据文件名返回他所在的路径!!!!
- 紧急求救:映射网络驱动器用WNetAddConnection2返回ERROR_INVALID_PARAMER错误!
但是,closesocket以前要确定关闭的socket不为空!就象下面这样:
ASSERT(m_hSocket != NULL);
if(closesocket(m_hSocket) == SOCKET_ERROR)
...