使用事件驱动套接字时如何生成网络事件FD_WRITE。 [英] How network event FD_WRITE is generated when using Event Driven Sockets.

查看:127
本文介绍了使用事件驱动套接字时如何生成网络事件FD_WRITE。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究基于newwork的事件套接字应用程序。



当客户端发送了一些数据并且套接字上有东西需要读取时, FD_READ 网络事件是生成。



现在根据我的理解,当服务器想要通过套接字写入时,必须有一个事件生成,即 FD_WRITE 。但是如何生成此消息?



如果有可读的内容, FD_READ 会自动生成,但 FD_WRITE 当服务器想要写东西时? :(



任何能帮助我解决这个困惑的人?:(



以下是代码片段:



I am working on newtwork event based socket application.

When client has sent some data and there is something to be read on the socket, FD_READ network event is generated.

Now according to my understanding, when server wants to write over the socket, there must be an event generated i.e. FD_WRITE. But how this message will be generated?

When there is something available to be read, FD_READ is automatically generated but what about FD_WRITE when server wants to write something? :(

Anyone who can help me with this confusion please? :(

Following is the code snippet:

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()
			}
		}
      }

推荐答案

参见 http://msdn.microsoft.com/en-us/library /windows/desktop/ms741540(v=vs.85).aspx [ ^ ]有关如何生成和使用这些事件的完整说明。
See http://msdn.microsoft.com/en-us/library/windows/desktop/ms741540(v=vs.85).aspx[^] for a complete description of how these events are generated and consumed.


这篇关于使用事件驱动套接字时如何生成网络事件FD_WRITE。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆