我正在研究基于 newtwork 事件的套接字应用程序。
当客户端发送了一些数据并且套接字上有要读取的内容时,会生成 FD_READ 网络事件。
现在根据我的理解,当服务器要通过套接字写入时,必须有一个事件产生,即FD_WRITE。但是这个消息是怎么产生的呢?
当有可读取的内容时,会自动生成 FD_READ,但是当服务器要写入内容时,FD_WRITE 呢?
谁能帮我解决这个困惑?
以下是代码片段:
WSAEVENT hEvent = WSACreateEvent();
WSANETWORKEVENTS events;
WSAEventSelect(newSocketIdentifier, hEvent, FD_READ | FD_WRITE);
while(1)
{ //while(1) starts
waitRet = WSAWaitForMultipleEvents(1, &hEvent, FALSE, WSA_INFINITE, FALSE);
//WSAResetEvent(hEvent);
if(WSAEnumNetworkEvents(newSocketIdentifier,hEvent,&events) == SOCKET_ERROR)
{
//Failure
}
else
{ //else event occurred starts
if(events.lNetworkEvents & FD_READ)
{
//recvfrom()
}
if(events.lNetworkEvents & FD_WRITE)
{
//sendto()
}
}
}