在IO 完全模式下如何知道AcceptEx函数是否接受客户的连接
naile 2002-07-10 04:54:25 我用IO完全模式作了一个程序主线程循环用AcceptEx接受连接,如下
while(1)
{
SOCKET Acceptsock=WSASocket
(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
DWORD bytes;
LPPER_IO_OPERATION_DATA overlapped;//一个以OVERLAPPED开头的结构
overlapped=(LPPER_IO_OPERATION_DATA)GlobalAlloc(GPTR,
sizeof(PER_IO_OPERATION_DATA));
overlapped->oplvtype = ZHU_ACCEPT;
overlapped->sock = Acceptsock;
char buff[sizeof(SOCKADDR_IN)*2+16];
if(AcceptEx(Listensock,Acceptsock,buff,0,
sizeof(SOCKADDR_IN)+16,
sizeof(SOCKADDR_IN)+16,
&bytes,&(overlapped->overlap))==0)
{
if(GetLastError()!=WSA_IO_PENDING)
{
AfxMessageBox("Accept Error:%d",aa);
return;
}
}
}
但是因为采用异步方式接受连接,故次段程序不停运行,不断的开辟LPPER_IO_OPERATION_DATA 结构空间,但只有有连接时创建的结构有效,别的要将内存回收,请问我如何在这段程序中知道那一次调用的AcceptEx是真正接受到连接的?