请教EventSelect模型如何Connect?
学习网络编程,用EventSelect模型编写,查了很多资料都是处理接收、发送、接入链接的,没有看到过用EventSelect模型怎样连接服务器。我理解的连接应该和发送数据处理一样,就是给套接字注册FD_CONNECT事件,然后调用WaitForSingleObject等待事件触发(只是想测试一下connect怎样使用,所以只连接就行了),之后调用connection连接。可结果发现注册过的CONNECT事件并不触发,没有办法连接。以下是我的代码,测试用的写的很简单,请教如何连接。
ConnEvent=WSACreateEvent();
int rc = WSAEventSelect(
s,
ConnEvent,
FD_CONNECT | FD_CLOSE
);
rc=WaitForSingleObject(ConnEvent, INFINITE);
if (rc == WAIT_FAILED)
{
cout<<"ChildThread: WaitForSingleObject failed:%d\n"<< GetLastError());
return;
}
rc = WSAEnumNetworkEvents(
s,
ConnEvent,
&nevents
);
if (rc == SOCKET_ERROR)
{
cout<<"WSAEnumNetworkEvents error!"<<endl;
return;
}
if (nevents.lNetworkEvents & FD_WRITE)
{
if (nevents.iErrorCode[FD_CONNECT_BIT] == 0)
{
if (connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr))
== SOCKET_ERROR && WSAGetLastError()!=10035)
{
cout<<"connect failed with error"<<WSAGetLastError();
closesocket(s);
WSACleanup();
return;
}
}
else
{
cout<<"connect error!"<<endl;
return;
}
}