关于FD_READ事件
问:
windows网络编程技术》把我看糊涂了,比如说,当服务器的FD_ACCEPT被调用时,
m_aClientSocket= accept(m_hServerSocket, (LPSOCKADDR)&m_sockClientAddr, (LPINT)&nLength);他用这个方法接受了一个客户机的请求,并且获得了这个客户机的套接字,然后再用WSAAsyncSelect(m_aClientSocket,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE);来设置监听事件,那么什么时候才能调用FD_READ这个事件呢,是在服务器向客户机用send函数的时候,还是说当
m_aClientSocket代表的那个客户机向服务器send的时候调用啊??????
小弟刚开始学网络编程,问题很可笑,还望各位大虾多指教
回答:
FD_READ有三种情况:
1)有数据可以读入的时候就会产生FD_READ事件
2)连接已经关闭、重设或中止就会产生FD_READ事件
3)假如已经调用listen,而且一个连接正在建立,那么acept函数调用才会成功
只要有客户机向服务器SEND就会触发FD_READ事件.一般来说,在FD_READ:下的第一件是先判断是哪一个客户也就是是哪一个套接字触发的该事件(如果有多个客户连接的话),再来在该套接字上处理收到包.
WSAAsyncSelect(...),根据其参数的不同,会根据其监听的事件产生相应的消息;
例如:WSAAsyncSelect(m_aClientSocket,m_hWnd,WM_CLIENT_READCLOSE,FD_READ|FD_CLOSE),
当FD_READ,和FD_CLOSE事件产生时,会发送消息WM_CLIENT_READCLOSE到m_hWnd;
详见MSDN;