Accept阻塞时,导致监听socket不能释放问题的解决方法:
采用Accept线程,专门开个线程去接收,在网络编程中,就是在receive端线程中开个accept线程去接收,可以解决阻塞问题,因为父线程结束了,子线程会被操作系统回收,不用我们做了
,当然我们线程不能开太多,否则会出现malloc申请内存都出错。
- malloc:该函数分配给定的字节数,并返回一个指向它们的指针。如果没有足够的可用内存,那么它返回一个空指针。
部分代码说明:
//采用accept线程
if (flag)
{
HANDLE hAccept=CreateThread(0,0,AcceptWifiThread,(LPVOID)pDlg,0,0);
CloseHandle(hAccept);
flag=false;
}DWORD WINAPI AcceptWireThread(LPVOID lpparam)
{
CRecieveFileDlg* pDlg = (CRecieveFileDlg*)lpparam;
if(pDlg == NULL)
return 0;
SOCKET Listening = pDlg->m_Listening;
sockaddr_in ClientAddr;//客户端的协议信息
int nLen = sizeof(sockaddr);
if (pDlg->m_connectWireSocket = accept(Listening,(sockaddr*)&ClientAddr,&nLen))
theApp.WriteProfileStringA("BreakIP","wire","");
return 0;
}
本文介绍了一种通过创建专用的Accept线程来解决网络编程中监听socket因Accept操作阻塞而导致无法释放的问题。通过这种方式,即使父线程结束,子线程也会被操作系统回收,从而避免了阻塞问题。
1034

被折叠的 条评论
为什么被折叠?



