CAsyncSocket实现的不解
void test5()
{
AfxSocketInit();
CAsyncSocket sock;
SOCKET s1 = socket(AF_INET, SOCK_STREAM, 0);
SOCKET s2 = socket(AF_INET, SOCK_STREAM, 0);
sock.Attach(s1);
sock.Attach(s2);
CAsyncSocket* pS1 = CAsyncSocket::FromHandle(s1);
CAsyncSocket* pS2 = CAsyncSocket::FromHandle(s2);
ASSERT(pS1==pS2);
ASSERT(pS1->m_hSocket != s1); //不一致
}
如上代码,同一CAyncSocket对象怎么可以两次成功Attach,而且查询全局线程局部存储得到的
套接字句柄对应的CAyncSocket是同一对象,但是显然pS1与s1不再绑定了.
这是CAyncSocket::Attach的源代码
BOOL CAsyncSocket::Attach(SOCKET hSocket, long lEvent) //一个对象可以attach多次?
{
ASSERT(hSocket != INVALID_SOCKET);
m_hSocket = hSocket;
CAsyncSocket::AttachHandle(hSocket, this);
return AsyncSelect(lEvent);
}
居然没有判断对象是否已经绑定了套接字句柄?
有什么特殊的用意吗?望知情者指点一二.